我从ddply
函数中找到了一个有趣的功能。您似乎不能在汇总输出数据框中使用与输入数据框中相同的变量名称:
set.seed(1)
ex <- data.frame(Type = c(rep("a", 10), rep("b", 10)), time = rnorm(20, 6,3))
ddply(ex, .(Type), summarize, time = mean(time), n = length(time))
Type time n
1 a 6.396608 1
2 b 6.746535 1
length
出现为1.然而,如果您将变量名称(时间)更改为其他内容:
ddply(ex, .(Type), summarize, tim = mean(time), n = length(time))
Type tim n
1 a 6.396608 10
2 b 6.746535 10
如果我重新排列输出列,也会有所帮助:
ddply(ex, .(Type), summarize, n = length(time), time = mean(time))
Type n time
1 a 10 6.396608
2 b 10 6.746535
或者重命名输入的变量:
set.seed(1)
ex <- data.frame(Type = c(rep("a", 10), rep("b", 10)), tim = rnorm(20, 6,3))
ddply(ex, .(Type), summarize, time = mean(tim), n = length(tim))
Type time n
1 a 6.396608 10
2 b 6.746535 10
可是:
ddply(ex, .(Type), summarize, tim = mean(tim), n = length(tim))
Type tim n
1 a 6.396608 1
2 b 6.746535 1
我正在努力:
R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
plyr_1.8
这是plyr
的已知功能还是在R 3.0.0之后发生的事情?
答案 0 :(得分:2)
对于你的第一个例子,这可能是因为微积分是按顺序进行的。首先,您计算时间=平均值(时间),因此计算时间长度为1。因此,当你要求长度(时间)然后你得到1,而如果你在创建对象时间之前询问长度,你得到你的预期结果,如你的第3和第5个例子所示。