plyr摘要输出和输入数据框中的变量名称

时间:2013-04-26 09:35:58

标签: r plyr

我从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之后发生的事情?

1 个答案:

答案 0 :(得分:2)

对于你的第一个例子,这可能是因为微积分是按顺序进行的。首先,您计算时间=平均值(时间),因此计算时间长度为1。因此,当你要求长度(时间)然后你得到1,而如果你在创建对象时间之前询问长度,你得到你的预期结果,如你的第3和第5个例子所示。