#r
#r
Вопрос:
Я пытаюсь определить функцию, которая позволила бы мне стандартизировать переменную. Я хотел бы стандартизировать каждое наблюдение в отношении его конкретной подотрасли. Результат дает мне NA…
код следующий:
standard<-function(x){
return((x - mean(subset(dat1,Industry=="x"),na.rm=TRUE)))
}
std_data<-as.data.frame(apply(dat1[2:8],2,standard))
Комментарии:
1. Пожалуйста, используйте инструменты, предоставляемые редактором SO, чтобы включить соответствующий код в свой вопрос (не прикрепляйте изображение) и укажите язык, который вы используете, с соответствующими тегами
2. Спасибо! Я прикрепил свой код 🙂
Ответ №1:
Для ваших целей уже есть функции, подобные scale
. Может быть, вы можете использовать это.
library(dplyr)
dat1 <- dat1 %>%
group_by(Industry) %>%
mutate(across(2:8, ~ scale(., center = TRUE, scale = FALSE)))
Комментарии:
1. Большое вам спасибо за ваш ответ! Можно ли спросить вас, не работает ли у меня across из-за неспособности моего ноутбука загрузить пакет devtool, есть ли какие-либо изменения в across?
2. Затем вы можете вернуться к своей функции apply: определите функцию
group.center <- function(var,grp) { return(var-tapply(var,grp,mean,na.rm=T)[grp]) }
и примените ееdat1[,2:8] <- sapply(dat1[, 2:8], group.center, dat1$Industry)
3. Это действительно сработало. Большое вам спасибо, я действительно ценю это. Желаю вам отличного дня!