1

我正在寻找类似于数据集包中的 ToothGrowth 数据的数据。

我想要的输出如下所示:

  supp   len  half   one   two
1   OJ 619.9 132.3 227.0 260.6
2   VC 508.9  79.8 167.7 261.4

这是按剂量和补充剂类型划分的长度总和。我的同事使用 R 版本 2.15.1 和 plyr_1.7.1 使用以下代码获取此输出。

library(datasets)           

x <- ToothGrowth

test <- ddply(x,c("supp"),summarize,
                     len = sum(len,na.rm=TRUE),
                     half = sum(len[dose==0.5],na.rm=TRUE),
                     one = sum(len[dose==1],na.rm=TRUE),
                     two = sum(len[dose==2],na.rm=TRUE))

ToothGrowth 数据中没有 NA,但真实数据集中有。

我得到以下输出 R 版本 3.0.0 和 plyr_1.8。如果有用的话,我可以为两者提供完整的 sessionInfo()。

    supp    len half    one two
1   OJ    619.9 619.9   0   0
2   VC    508.9 508.9   0   0

这似乎不会带来错误。在我的数据中,我只有三个“剂量”,但有很多“补充类型”。如果半类别中没有值,它会将整个总和归为一或二。

有没有一种方法可以在不同版本类型之间产生一致的输出?

谢谢你的帮助。

4

1 回答 1

7

summarise可以这么说,已更新为“默认变异”。所以在最后三个变量中,当你引用 时len,实际上是指len你刚刚创建的变量,它只是一个单一的值。叫它别的东西:

test <- ddply(x,c("supp"),summarize,
+                      len1 = sum(len,na.rm=TRUE),
+                      half = sum(len[dose==0.5],na.rm=TRUE),
+                      one = sum(len[dose==1],na.rm=TRUE),
+                      two = sum(len[dose==2],na.rm=TRUE))
> test
  supp  len1  half   one   two
1   OJ 619.9 132.3 227.0 260.6
2   VC 508.9  79.8 167.7 261.4

(我最初错误地将其称为更改ddply。)至于为什么,我想是因为它看起来很方便,人们要求更改。是所提出的问题和后续补丁的链接。

于 2013-04-26T15:10:06.033 回答