I have a dataframe:
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: In mean.default("Value") : 参数不是数值或逻辑型: 返回NA 2: In mean.default("Value") :
参数不是数值或逻辑型: 返回NA
我该如何使用变量传递列名?
mean(df[,columnName])
这行代码在我使用与您相同的变量时起作用。 - Benjamin Mohndplyr
包,但是它的工作方式如下:tapply(df[,columnName],df$Category, mean)
。 - Benjamin Mohnrnorm
创建数据框时使用set.seed
函数,以便我们可以双重检查结果。 - Sotosvignette("nse")
。实现此操作的一种方法是library(lazyeval) ; dots <- interp(~ mean(columnName), columnName = as.name("Value")) ; df %>% group_by(Category) %>% summarise_(.dots = dots)
。 - David Arenburg