我试图在循环中使用摘要后保留因子水平。 我使用模拟数据集复制我的问题。
df = data.frame(a=rep(1:3,4), b=rep(1:2,6),c=rep(1:2,6),d=rep(1:2,6))
df$b = factor(df$b, levels=1:3)
#the group are for the loop. Since it's just an example have only 1 value
outer_group <- c("a")
inner_group <- c("b")
使用下面的代码可以实现我想要的输出。但是,如果我在循环中有多个值
,使用这种方法我需要手动更改complete()
的列
for (o in outer_group){
for(i in inner_group){
df %>%
group_by_at(i) %>%
summarise(count_a=length(!!o)) %>%
complete(b) -> a
}
}
由于这种原因,我试图将其更改为complete(!!i)
,例如
for (o in outer_group){
for(i in inner_group){
df %>%
group_by_at(i) %>%
summarise(count_a=length(!!o)) %>%
complete(!!i) -> a
}
}
不幸的是,这不起作用
Error: `by` can't contain join column `"b"` which is missing from RHS
感谢您的帮助
所需的输出:
# A tibble: 3 x 2
b count_a
<fct> <int>
1 1 1
2 2 1
3 3 NA
答案 0 :(得分:1)
您可以使用wrapr::let
代替dplyr的报价机制:
library(wrapr)
for (o in outer_group){
for(i in inner_group){
let(c(I=i),
df %>%
group_by_at(i) %>%
summarise(count_a=length(!!o)) %>%
complete(I) -> a)
}
}
## A tibble: 3 x 2
# b count_a
# <fct> <int>
#1 1 1
#2 2 1
#3 3 NA