学习理解plyr,ddply

rsg*_*mon 21 r plyr

我一直在尝试通过尝试不同的变量和函数以及查看结果来了解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(长度和总和不是),或者至少是一个适当的向量输出长度.