У меня есть кадр данных:
df <- data.frame(Category = c(rep("A", 3), rep("B", 3)), Value = rnorm(6))
df
Category Value
1 A -0.94968814
2 A 2.56687061
3 A -0.15665153
4 B -0.47647105
5 B 0.83015076
6 B -0.03744522
Теперь я хочу добавить еще один столбец, который является средним значением для каждой категории. Это можно сделать с помощью пакета dplyr очень просто:
df %>% group_by(Category) %>%
summarize(mean = mean(Value))
Теперь в части кода моя проблема: я не могу использовать mean(Value)
, но у меня есть имя переменной, которое знает имя столбца: columnName = "Value"
Но это, к сожалению, не сработает:
columnName = "Value"
df %>% group_by(Category) %>%
summarize(mean = mean(columnName))
Предупреждающие сообщения: 1: В mean.default("Value") : аргумент не является числовым или логическим: возвращается NA 2: В mean.default("Value") :
аргумент не является числовым или логическим: возвращается NA
Как я могу передать имя столбца с переменной?
mean(df[,columnName])
этот код работал у меня при использовании тех же переменных, что и вы. - person Benjamin Mohn   schedule 21.12.2016dplyr
, но работает так:tapply(df[,columnName],df$Category, mean)
- person Benjamin Mohn   schedule 21.12.2016set.seed
при использовании таких функций, какrnorm
, для создания фреймов данных, чтобы мы могли перепроверить результаты. - person Sotos   schedule 21.12.2016vignette("nse")
. Один из способов добиться этого —library(lazyeval) ; dots <- interp(~ mean(columnName), columnName = as.name("Value")) ; df %>% group_by(Category) %>% summarise_(.dots = dots)
- person David Arenburg   schedule 21.12.2016