dplyr:如何将do()应用于group_by的结果?
我想使用dplyr将一个表按一列分组,然后对每组第二列中的值集应用一个函数 例如,在下面的代码示例中,我想返回每个人所吃的所有两种食物组合。我不知道如何在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
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