r: программная нормализация и именование переменных - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть набор данных из двух переменных:

df<- data.frame(var1= rnorm(20, 15, 1.5), var2= rnorm(20, 7.5, 1))

У меня есть функция, которую я могу использовать для их нормализации:

normFunc<- function(x){
  xAvg<- mean(x)
  return(x/xAvg)
}

Запуск функции вручную работает нормально, см. Нижеon var1:

df$var1AVG<- normFunc(df$var1)

enter image description here

Что я хотел бы сделать, это передать обе переменные в функцию динамически, используя либо for цикл, присвойте их фрейму данных и динамически присвойте им имя.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете использовать colMeans / colMeans2, чтобы сделать это в векторизации

df / colMeans(df)
# or
df / matrixStats::colMeans2(as.matrix(df))
# yields
     var1      var2
1  0.9307705 0.4228236
2  1.9674104 0.9776180
3  1.1397295 0.4255726
4  2.0279614 0.9090271
5  0.9987836 0.4519303
...

с данными

set.seed(123)
df <- data.frame(var1= rnorm(20, 15, 1.5), var2= rnorm(20, 7.5, 1))

Добавление

Чтобы ответить на ваш вопрос:

В качестве альтернативы, метод Vectorize стоит проверить в таком случае или в семействе apply (vapply является, безусловно, наиболее эффективным) -в вашем случае vapply(1:ncol(df), function (n) normFunc(df[,n]), numeric(nrow(df))) будет работать.Или хорошо построенный цикл иногда может быть даже быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...