dplyr:如何将do()应用于group_by的结果?

dplyr:如何将do()应用于group_by的结果?,r,dplyr,R,Dplyr,我想使用dplyr将一个表按一列分组,然后对每组第二列中的值集应用一个函数 例如,在下面的代码示例中,我想返回每个人所吃的所有两种食物组合。我不知道如何在do()函数中为函数提供正确的列(foods) library(dplyr) person = c( 'Grace', 'Grace', 'Grace', 'Rob', 'Rob', 'Rob' ) foods = c( 'apple', 'banana', 'cucumber', 'spaghetti', 'cucumber', 'ba

我想使用dplyr将一个表按一列分组,然后对每组第二列中的值集应用一个函数

例如,在下面的代码示例中,我想返回每个人所吃的所有两种食物组合。我不知道如何在
do()
函数中为函数提供正确的列(foods)

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 ) )
请注意,
?do
中的示例代码在我的机器上失败

mods <- do(carriers, failwith(NULL, lm), formula = ArrDelay ~ date)

mods让我们这样定义
eat

eaten <- data.frame(person, foods, stringsAsFactors = FALSE)
给予:

[[1]]
     [,1]     [,2]       [,3]      
[1,] "apple"  "apple"    "banana"  
[2,] "banana" "cucumber" "cucumber"

[[2]]
     [,1]        [,2]        [,3]      
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber"  "banana"    "banana"  
$Grace
     [,1]     [,2]       [,3]      
[1,] "apple"  "apple"    "banana"  
[2,] "banana" "cucumber" "cucumber"

$Rob
     [,1]        [,2]        [,3]      
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber"  "banana"    "banana"  
2)要想做一些接近@Hadley在评论中描述的事情,而不必等待dplyr的未来版本,请在找到
do2
的地方尝试以下操作:

给予:

[[1]]
     [,1]     [,2]       [,3]      
[1,] "apple"  "apple"    "banana"  
[2,] "banana" "cucumber" "cucumber"

[[2]]
     [,1]        [,2]        [,3]      
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber"  "banana"    "banana"  
$Grace
     [,1]     [,2]       [,3]      
[1,] "apple"  "apple"    "banana"  
[2,] "banana" "cucumber" "cucumber"

$Rob
     [,1]        [,2]        [,3]      
[1,] "spaghetti" "spaghetti" "cucumber"
[2,] "cucumber"  "banana"    "banana"  

注意:问题的最后一行给出了帮助文件中的代码,对我来说也是失败的。这个变体对我很有用:
do(jan,lm,formula=ArrDelay~date)

在未来的dplyr版本中,您将能够执行类似于
do(combn(.$foods,m=2))
的操作,并且组件将自动使用有用的名称。非常感谢您提供的有用解决方案!stringsAsFactors在第一行中有一些小的输入错误。这次引入了一个新的:)我认为自从这个答案(#1)创建以来,
dplyr
已经改变了。其中一个变化是从
%.%
%>%
。我做了一些修改,下面的代码生成了一个基本上符合预期输出的tibble,我想:
eat%%>%groupu\u by(person)%%>%do(k=combn(.$foods,m=2))
这里,k是tibble中的列,其中每个元素都是一个矩阵,其中每个列都有两种独特的食物类型,可能被此人吃掉,这三对独特的组合有三个栏目。如上所述,这是在一个新的问题中重新访问的:在仔细研究之后,我发现这个问题被重新提问和回答,因为
dplyr