【发布时间】:2024-10-17 21:40:01
【问题描述】:
我有一个数据框,我想在两个方向上进行分组,首先是按行排列,然后是按列排列。第一部分效果很好,但我坚持第二部分。对于同时执行这两个步骤的解决方案,我将不胜感激。
这是数据框:
df1 <- data.frame(
ID = c(rep(1,5),rep(2,5)),
ID2 = rep(c("A","B","C","D","E"),2),
A = rnorm(10,20,1),
B = rnorm(10,50,1),
C = rnorm(10,10,1),
D = rnorm(10,15,1),
E = rnorm(10,5,1)
)
这是第二个数据帧,它包含分组的“配方”:
df2 <- data.frame (
Group_1 = c("B","C"),
Group_2 = c("D","A"),
Group_3 = ("E"), stringsAsFactors = FALSE)
Rowise 分组:
df1_grouped<-bind_cols(df1[1:2], map_df(df2, ~rowSums(df1[unique(.x)])))
现在我想对 ID2 列应用相同的分组并对其他列中的值求和。我的想法是改变另一列(例如“组”,其中包含 ID2 的最终组的名称。在此之后,我可以使用 group_by() 和 summarise() 来计算每个列的总和。但是,我不能找出一种自动化的方法来做到这一点
bind_cols(df1_grouped,
#add group label
data.frame(
group = rep(c("Group_2","Group_1","Group_1","Group_2","Group_3"),2))) %>%
#remove temporary label column and make ID a character column
mutate(ID2=group,
ID=as.character(ID))%>%
select(-group) %>%
#summarise
group_by(ID,ID2)%>%
summarise_if(is.numeric, sum, na.rm = TRUE)
这是我需要的最终表,但我必须手动分配组,这对于大数据集是不可能的
【问题讨论】: