【发布时间】:2018-09-21 17:06:41
【问题描述】:
这是我想做的事情: 我有一个数据框 df 定义为:
col1 <- c("a","a","a","a","a","a","b","b","b","b","b","b")
col2 <- c("z","z","x","x","z","x", "z","z","x","x","z","x")
col3 <- c(1,2,3,4,5,6,7,8,9,10,11,12)
df <- data.frame(col1,col2,col3)
和一个计算平均值的函数 pred 定义为:
pred <- function(subset_df){return(mean(subset_df$col3))}
我想要一个通过 by 函数的数据框,格式如下:
col1 col2 col3_mean
a x 4.33
a z 2.66
b x 10.33
b z 8.66
我目前正在使用 by() 函数将这些数据划分为其层,并应用 pred() 函数来计算平均值
by_keys <- c("col1","col2")
data_sub <- by(df, data_sub[,by_keys], pred)
data_sub <- do.call(rbind, data_sub)
我在这里收到一个错误,说“do.call(rbind, data_sub) 中的错误:第二个参数必须是一个列表”
我尝试了类似胎面的解决方案,但我没有得到所需格式的 col1 和 col2
as.data.frame(vapply(data_sub,unlist,unlist(data_sub[[1]])))
不胜感激。
【问题讨论】:
-
aggregate(col3~.,df,mean)很容易做到这一点