Group_by_at 和 Group_by 中的问题
Issue in Group_by_at & Group_by
下面是数据框和我要执行的代码。
如下图我想group_byx
以及color
。
x
是一个字符串,因此我使用了 group_by_at
函数。
df <- data.frame(
color = c("Yellow", "Blue", "Green", "Red", "Magenta"),
values = c(24, 24, 34, 45, 49),
Quarter = c("Period1","Period2" , "Period3", "Period3", "Period1"),
Market = c("Camden", "StreetA", "DansFireplace", "StreetA", "DansFireplace"))
list = c("Market", "Quarter")
df_all <- do.call(rbind, lapply(list, function(x) {
df_l <- df %>%
group_by_at(x) %>%
group_by(color) %>%
summarise(values = sum(values)) %>%
mutate(cut = x) %>%
data.frame()
colnames(df_l)[colnames(df_l) == x] <- "Grouping"
df_l
}))
问题是虽然此代码是 运行,但它没有按 x
分组。只有当我删除 group_by(color)
时,它才会按 x
.
分组
我的 objective 是按 x
和 color
分组。
如果我对您的问题的理解正确,请将 color
和 x
包含在同一 group_by
语句中:
df_all <- do.call(rbind, lapply(list, function(x){
df_l= df %>% group_by_at(c(x, "color")) %>%
summarise(values = sum(values)) %>%
mutate(cut= x) %>%
data.frame()
colnames(df_l)[colnames(df_l)==x] <- "Grouping"
df_l
}))
这给出:
Grouping color values cut
1 Camden Yellow 24 Market
2 DansFireplace Green 34 Market
3 DansFireplace Magenta 49 Market
4 StreetA Blue 24 Market
5 StreetA Red 45 Market
6 Period1 Magenta 49 Quarter
7 Period1 Yellow 24 Quarter
8 Period2 Blue 24 Quarter
9 Period3 Green 34 Quarter
10 Period3 Red 45 Quarter
下面是数据框和我要执行的代码。
如下图我想group_byx
以及color
。
x
是一个字符串,因此我使用了 group_by_at
函数。
df <- data.frame(
color = c("Yellow", "Blue", "Green", "Red", "Magenta"),
values = c(24, 24, 34, 45, 49),
Quarter = c("Period1","Period2" , "Period3", "Period3", "Period1"),
Market = c("Camden", "StreetA", "DansFireplace", "StreetA", "DansFireplace"))
list = c("Market", "Quarter")
df_all <- do.call(rbind, lapply(list, function(x) {
df_l <- df %>%
group_by_at(x) %>%
group_by(color) %>%
summarise(values = sum(values)) %>%
mutate(cut = x) %>%
data.frame()
colnames(df_l)[colnames(df_l) == x] <- "Grouping"
df_l
}))
问题是虽然此代码是 运行,但它没有按 x
分组。只有当我删除 group_by(color)
时,它才会按 x
.
我的 objective 是按 x
和 color
分组。
如果我对您的问题的理解正确,请将 color
和 x
包含在同一 group_by
语句中:
df_all <- do.call(rbind, lapply(list, function(x){
df_l= df %>% group_by_at(c(x, "color")) %>%
summarise(values = sum(values)) %>%
mutate(cut= x) %>%
data.frame()
colnames(df_l)[colnames(df_l)==x] <- "Grouping"
df_l
}))
这给出:
Grouping color values cut
1 Camden Yellow 24 Market
2 DansFireplace Green 34 Market
3 DansFireplace Magenta 49 Market
4 StreetA Blue 24 Market
5 StreetA Red 45 Market
6 Period1 Magenta 49 Quarter
7 Period1 Yellow 24 Quarter
8 Period2 Blue 24 Quarter
9 Period3 Green 34 Quarter
10 Period3 Red 45 Quarter