我想总结一下类似于数据集包中的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
Run Code Online (Sandbox Code Playgroud)
这是按剂量和补充类型分开的长度之和.我的同事使用以下代码使用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))
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这似乎没有出现错误.在我的数据中,我只有三个'剂量',但很多'补充类型'.如果半类中没有值,则将全部总和设为一个或两个.
有没有一种方法可以实现这一点,从而在版本类型中产生一致的输出?
谢谢你的帮助.
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
Run Code Online (Sandbox Code Playgroud)
(我原本错误地称这是一个改变ddply.)至于为什么,我想因为它似乎很方便,人们要求改变.以下是引发问题和后续补丁的链接.