r - ddply() 似乎没有在我的数据框中划分子集

标签 r plyr

我试图在数据集的子集中获取汇总统计信息,并自然地转向 plyr 包,因为我正在使用数据帧 ddply()。我不明白为什么这不起作用......

t <- as.data.frame(cbind(1, seq(1:20)))
t2 <- as.data.frame(cbind(2, seq(21:40)))
t <- rbind(t, t2)
rm(t2)
is.data.frame(t)
[1] TRUE
ddply(t, .(V1), function(x) c(missing = sum(is.na(t$V2)),
                              n       = sum(!is.na(t$V2)),
                              mean    = mean(t$V2, na.rm = TRUE),
                              sd      = sd(t$V2, na.rm = TRUE)))
  V1 missing  n mean      sd
1  1       0 40 10.5 5.83974
2  2       0 40 10.5 5.83974

我读过一些类似 this quick overview 的内容Stackoverflow 上的一些帖子搜索并发现了类似的问题,并认为我的答案是正确的,但显然不是。任何关于我做错或误解的事情的见解都将不胜感激。

提前致谢,

走扁带

最佳答案

我发现了几个问题。首先,不要将 seq 与冒号运算符结合使用。单独使用冒号即可获得所需的序列:

1:20
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
21:40
# [1] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

如果您同时使用两者,seq 将为您提供一个序列以及您传递给它的序列:

seq(21:40)
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

其次,t 是您的整个数据集。您想要对 x 进行操作,即 V1 定义的子集:

ddply(t, .(V1), function(x) c(missing = sum(is.na(x$V2)),
                              n       = sum(!is.na(x$V2)),
                              mean    = mean(x$V2, na.rm = TRUE),
                              sd      = sd(x$V2, na.rm = TRUE)))

关于r - ddply() 似乎没有在我的数据框中划分子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18213027/

相关文章:

r - 无法将 xgb.DMatrix 传递给插入符

r - 使用替代获得参数名称

r - 如何从 R 中的开始日期和结束日期列表中计算一组中的当前人数

r - R 中的唯一行,考虑两列,无顺序

r - 根据预设条件汇总数据并添加 (0,1) 标志

perl - 如何使用 pdl 创建序列?

r - 将数据从嵌套数据框中提取到同一记录中

r - 使用 ddply 选择组的最小值

r - 手动 alpha 比例 exp(-x)

r - 使用 ddply 排除某些列中的重复值