Проблема с подмножеством при выполнении функции

#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. Это действительно сработало. Большое вам спасибо, я действительно ценю это. Желаю вам отличного дня!