我想使用dplyr将表分组为一列,然后将函数应用于每组第二列中的值集.
例如,在下面的代码示例中,我想返回每个人吃的所有2项食物组合.我无法弄清楚如何在功能中正确提供功能与正确的列(食物)do()
.
library(dplyr)
person = c( 'Grace', 'Grace', 'Grace', 'Rob', 'Rob', 'Rob' )
foods = c( 'apple', 'banana', 'cucumber', 'spaghetti', 'cucumber', 'banana' )
eaten = data.frame(person, foods)
by_person = group_by(eaten, person)
# How to do this?
do( by_person, combn( x = foods, m = 2 ) )
Run Code Online (Sandbox Code Playgroud)
请注意,?do
我的计算机上的示例代码失败
mods <- do(carriers, failwith(NULL, lm), formula = ArrDelay ~ date)
Run Code Online (Sandbox Code Playgroud)
G. *_*eck 15
让我们这样定义eaten
:
eaten <- data.frame(person, foods, stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
1)然后试试这个:
eaten %.% group_by(person) %.% do(function(x) combn(x$foods, m = 2))
Run Code Online (Sandbox Code Playgroud)
赠送:
[[1]]
[,1] [,2] [,3]
[1,] "apple" "apple" "banana"
[2,] "banana" "cucumber" "cucumber"
[[2]]
[,1] [,2] [,3]
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber" "banana" "banana"
Run Code Online (Sandbox Code Playgroud)
2)为了能够做到接近的东西是什么@Hadley介绍了评论,而无需等待dplyr的未来版本试试这个地方do2
被发现这里:
library(gsubfn)
eaten %.% group_by(person) %.% fn$do2(~ combn(.$foods, m = 2))
Run Code Online (Sandbox Code Playgroud)
赠送:
$Grace
[,1] [,2] [,3]
[1,] "apple" "apple" "banana"
[2,] "banana" "cucumber" "cucumber"
$Rob
[,1] [,2] [,3]
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber" "banana" "banana"
Run Code Online (Sandbox Code Playgroud)
注意:在帮助文件中提供代码的问题的最后一行也对我失败了.这种变化对我有用: do(jan, lm, formula = ArrDelay ~ date)
.
归档时间: |
|
查看次数: |
11124 次 |
最近记录: |