尝试解决以下用例:
我有一个完整的数据集(mydf
),根据另一组变量组合(dplyr::group_by
)的条目,我希望mysplits
具有不同的变量集。问题是,我的mysplits
data.frame包含变量名称作为字符。
有一个dplyr::group_by_
选项,但我希望使用类似于rlang
功能或类似功能的工具来实现这一目标。
mydf <-
data.frame(
var1 = c('x', 'x', 'y', 'y'),
var2 = c('y', 'z', 'x', 'z'),
var3 = c('a', 'b', 'a', 'b'),
outcome = runif(4),
stringsAsFactors = F
)
mysplits <-
data.frame(
g1 = c('var1', 'var2'),
g2 = c('var2', 'var3'),
stringsAsFactors = F
)
我正在寻找类似的东西:
dlply(
.data = mysplits, .variables = (g1, g2),
function(thissplit){
group_by(mydf, f(thissplit$g1), f(thissplit$g2)) %>% summarise(mean(outcome))
}
)
其中f()
是我拼图中缺失的组成部分。
答案 0 :(得分:1)
首先,确保您的data.frame名称具有字符值而不是因子级别
mysplits <-
data.frame(
g1 = c('var1', 'var2'),
g2 = c('var2', 'var3'),
stringsAsFactors=FALSE
)
然后,您可以使用group_by_at
和字符串来选择列名。例如
group_by_at(mydf, c("var1", "var2")) %>% summarise(mean(outcome))
你可以用不同的方式循环遍历值,但是使用其他的tidyverse函数而不是你可以做的plyr函数
map2(mysplits$g1, mysplits$g2, ~group_by_at(mydf, c(.x, .y)) %>% summarise(mean(outcome)))
如果您坚持使用group_by
和rlang内容,则可以将字符转换为rlang::sym()
的符号,然后取消引用!!
的符号,例如
group_by(mydf, !!rlang::sym(thissplit$g1), !!rlang::sym(thissplit$g2)) %>% summarise(mean(outcome))