我一直在尝试通过尝试不同的变量和函数以及查看结果来了解plyr的工作原理和方式.因此,我更多地寻找有关plyr如何工作的解释,而不是特定的解决方案.我已经阅读了文档但我的新手大脑仍然没有得到它.
一些数据和名称:
mydf<- data.frame(c("a","a","b","b","c","c"),c("e","e","e","e","e","e")
,c(1,2,3,10,20,30),
c(5,10,20,20,15,10))
colnames(mydf)<-c("Model", "Class","Length", "Speed")
mydf
Run Code Online (Sandbox Code Playgroud)
问题1:汇总与转换语法
所以,如果我输入: ddply(mydf, .(Model), summarise, sum = Length+Length)
我明白了:
`Model ..1
1 a 2
2 a 4
3 b 6
4 b 20
5 c 40
6 c 60
Run Code Online (Sandbox Code Playgroud)
如果我输入:ddply(mydf, .(Model), summarise, Length+Length)
我得到相同的结果.
现在如果使用转换: ddply(mydf, .(Model), transform, sum = (Length+Length))
我明白了:
Model Class Length Speed sum
1 a e 1 5 2
2 a e 2 10 4
3 b e 3 20 6
4 b e 10 20 20
5 c e 20 15 40
6 c e 30 10 60
Run Code Online (Sandbox Code Playgroud)
但如果我像第一次总结那样陈述:
ddply(mydf, .(Model), transform, (Length+Length))
Model Class Length Speed
1 a e 1 5
2 a e 2 10
3 b e 3 20
4 b e 10 20
5 c e 20 15
6 c e 30 10
Run Code Online (Sandbox Code Playgroud)
那么为什么添加"sum ="会产生影响呢?
问题2:为什么这些不起作用?
ddply(mydf, .(Model), sum, Length+Length)
函数中的#Error(i):找不到对象'Length'
ddply(mydf, .(Model), length, mydf$Length) #Error in .fun(piece, ...) :
Run Code Online (Sandbox Code Playgroud)
传递给'length'的2个参数需要1
这些例子更多地表明我从根本上不了解如何使用plyr.
任何anwsers或解释都表示赞赏.
Ari*_*man 22
我发现当我无法"可视化"R中的任何功能工具时,最简单的事情就是浏览一个实例:
ddply(mydf, .(Model), function(x) browser() )
Run Code Online (Sandbox Code Playgroud)
然后x
实时检查,这一切都应该有意义.然后你可以在x上测试你的功能,如果它工作你就是黄金(除非其他分组与你的第一个x不同).
bap*_*ste 19
语法是:
ddply(data.frame, variable(s), function, optional arguments)
Run Code Online (Sandbox Code Playgroud)
函数预计返回的地方data.frame
.在你的情况下,
summarize是一个透明地创建一个新的data.frame的函数,你提供的表达式的结果作为进一步的参数(...)
transform,一个基本R函数,将转换data.frames(首先由变量拆分),根据您提供的表达式添加新列作为进一步的参数.这些需要被命名,这就是变换的工作方式.
如果你使用除子集,变换,变异,用,在或汇总之外的其他函数,你需要确保它们返回data.frame(长度和总和不是),或者至少是一个适当的向量输出长度.