У меня есть фрейм данных, который я хотел бы сгруппировать в обоих направлениях, сначала по часовой стрелке, а затем по столбцам. Первая часть работала хорошо, но я застрял со второй. Я был бы признателен за любую помощь или совет для решения, которое делает оба шага одновременно.
Это кадр данных:
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)
Группировка строк:
df1_grouped<-bind_cols(df1[1:2], map_df(df2, ~rowSums(df1[unique(.x)])))
Теперь я хотел бы применить ту же группировку к столбцу ID2 и суммировать значения в других столбцах. Моя идея состояла в том, чтобы изменить другой столбец (например, «group», который содержит имя последней группы ID2. После этого я могу использовать group_by () и sumrize () для вычисления суммы для каждого. Однако я не могу придумать автоматизированный способ сделать это
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)
Это последняя таблица, которая мне нужна, но мне пришлось вручную назначать группы, что невозможно для больших наборов данных