【发布时间】:2015-10-04 09:12:02
【问题描述】:
我一直在努力解决这个与a question raised here before 非常相似的问题。不知何故,我无法将该问题中给出的解决方案转化为我自己的问题。
我首先制作一个示例数据框:
test.df <- data.frame(col1 = rep(c('a','b'), each=5), col2 = runif(10))
str(test.df)
以下函数应基于“groupvar”的组创建一个具有“statvar”平均值的新数据框。
test.f <- function(df, groupvar, statvar) {
df %>%
group_by_(groupvar) %>%
select_(statvar) %>%
summarise_(
avg = ~mean(statvar, na.rm = TRUE)
)
}
test.f(df = test.df,
groupvar = "col1",
statvar = "col2")
我希望它返回的是一个具有 2 个计算平均值的数据框(一个用于 col1 中的所有 a 值,一个用于 col1 中的所有 b 值)。相反,我得到了这个:
col1 avg
1 a NA
2 b NA
Warning messages:
1: In mean.default("col2", na.rm = TRUE) :
argument is not numeric or logical: returning NA
2: In mean.default("col2", na.rm = TRUE) :
argument is not numeric or logical: returning NA
我觉得这很奇怪,因为我很确定 col2 是数字:
str(test.df)
'data.frame': 10 obs. of 2 variables:
$ col1: Factor w/ 2 levels "a","b": 1 1 1 1 1 2 2 2 2 2
$ col2: num 0.4269 0.1928 0.7766 0.0865 0.1798 ...
【问题讨论】: