ddply()似乎不是我的数据框中的子集

sla*_*ine 2 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
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一些像这样的快速概述和Stackoverflow上的一些线程搜索并发现了类似的问题,并认为我做对了,但显然没有.我会非常感激地了解我做错了什么或误解了什么.

提前致谢,

slackline

Pey*_*ton 5

我看到几个问题.首先,不要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
Run Code Online (Sandbox Code Playgroud)

如果您同时使用,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
Run Code Online (Sandbox Code Playgroud)

其次,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)))
Run Code Online (Sandbox Code Playgroud)