цикл for в именах переменных - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь повторить сложный синтаксис для набора переменных.По сути, используя такой набор данных, как:

df <- data.frame( X=1:10, Y=6:15, Z=11:20)

Я хотел бы заменить синтаксис вроде:

mean(df$X)
mean(df$Y)
mean(df$Z)

на цикл типа:

for (n in c("X", "Y", "Z")) {mean(df$n)}

ОднакоЭто довольно Stata-подобное программирование не работает в R. Кажется, что цикл пишет df$"X" вместо df$X.Есть ли простое решение?

ОБНОВЛЕНИЕ: Вместо вычисления среднего значения у меня есть более сложная функция, где мне постоянно приходится обращаться к именам переменных.Поэтому мой вопрос не о вычислительных средствах, а об использовании функции цикла.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Это делает работу.

for(n in c("X", "Y", "Z")) {mean(df[, n])}

Чтобы увидеть вывод, оберните mean в print():

# [1] 5.5
# [1] 10.5
# [1] 15.5

Я бы все же предпочел решение @ Prem, нотогда я не знаю точно, что ты делаешь ...

0 голосов
/ 08 июня 2018

Вы можете использовать summarise_at вместе с bind_cols.

В приведенном ниже коде я применил mean к столбцу X, Y & max к столбцу Y, Z.Точно так же вы можете применить свою собственную функцию к нескольким наборам различных столбцов аналогичным образом.

library(dplyr)

df %>%
  summarise_at(vars(X, Y), funs(Mean = mean)) %>%
  bind_cols(df %>%
              summarise_at(vars(Y, Z), funs(Max = max)))

, что дает

  X_Mean Y_Mean Y_Max Z_Max
1    5.5   10.5    15    20


Пример данных:

df <- structure(list(X = 1:10, Y = 6:15, Z = 11:20), .Names = c("X", 
"Y", "Z"), row.names = c(NA, -10L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...