合并行将为在 R 中组合的每一行定义不同的参数
Merging rows will defining different parameters for each row being combined in R
我有一个数据框,每个数据框都有不同的参数。我想为每一行使用一组不同的参数来合并行。
这是我的相同数据 ZZ:
ZZ<-data.frame(Name =c("A","B","C","D","E","F"),A1=c(19,20,21,23,45,67),A2=c(1,2,3,4,5,6),A3=c(7,8,13,24,88,90),x=c(4,5,6,8,23,16),y=c(-3,-7,-6,-9,3,2))
> ZZ
Name A1 A2 A3 x y
1 A 19 1 7 4 -3
2 B 20 2 8 5 -7
3 C 21 3 13 6 -6
4 D 23 4 24 8 -9
5 E 45 5 88 23 3
6 F 67 6 90 16 2
我想聚合行 A、B、C 和 D、E、F,以便为每个组定义一个新名称(例如:C1 和 C2),A1、A2 和 A3 按总和组合,而x 和 y 使用平均值。
请问如何做到这一点?结果应该是:
> ZZ2
Name A1 A2 A3 x y
1 C1 60 6 28 5.000 -5.333
2 C2 135 15 202 15.667 -1.333
根据我对您的问题的解释,我相信这应该可以为您提供使用 dplyr 所需的内容:
library(dplyr)
result <- ZZ %>%
mutate(Name = ifelse(Name %in% c("A", "B", "C"), "C1", "C2")) %>%
group_by(Name) %>%
summarise(A1 = sum(A1), A2 = sum(A2), A3 = sum(A3), x = mean(x), y = mean(y)) %>%
ungroup()
根据您拥有的具有不同名称的行的数量,可能有更好的替代方法来将 Name 变量转变为 2 个组。
编辑:示例,如果存在 4 个案例
result <- ZZ %>%
mutate(Name = case_when(Name %in% c("A", "B", "C") ~ "C1",
Name %in% c("D", "E") ~ "C2",
Name %in% c("F", "G") ~ "C3",
Name %in% c("H", "I") ~ "C4")) %>%
group_by(Name) %>%
summarise(A1 = sum(A1), A2 = sum(A2), A3 = sum(A3), x = mean(x), y = mean(y)) %>%
ungroup()
我有一个数据框,每个数据框都有不同的参数。我想为每一行使用一组不同的参数来合并行。 这是我的相同数据 ZZ:
ZZ<-data.frame(Name =c("A","B","C","D","E","F"),A1=c(19,20,21,23,45,67),A2=c(1,2,3,4,5,6),A3=c(7,8,13,24,88,90),x=c(4,5,6,8,23,16),y=c(-3,-7,-6,-9,3,2))
> ZZ
Name A1 A2 A3 x y
1 A 19 1 7 4 -3
2 B 20 2 8 5 -7
3 C 21 3 13 6 -6
4 D 23 4 24 8 -9
5 E 45 5 88 23 3
6 F 67 6 90 16 2
我想聚合行 A、B、C 和 D、E、F,以便为每个组定义一个新名称(例如:C1 和 C2),A1、A2 和 A3 按总和组合,而x 和 y 使用平均值。
请问如何做到这一点?结果应该是:
> ZZ2
Name A1 A2 A3 x y
1 C1 60 6 28 5.000 -5.333
2 C2 135 15 202 15.667 -1.333
根据我对您的问题的解释,我相信这应该可以为您提供使用 dplyr 所需的内容:
library(dplyr)
result <- ZZ %>%
mutate(Name = ifelse(Name %in% c("A", "B", "C"), "C1", "C2")) %>%
group_by(Name) %>%
summarise(A1 = sum(A1), A2 = sum(A2), A3 = sum(A3), x = mean(x), y = mean(y)) %>%
ungroup()
根据您拥有的具有不同名称的行的数量,可能有更好的替代方法来将 Name 变量转变为 2 个组。
编辑:示例,如果存在 4 个案例
result <- ZZ %>%
mutate(Name = case_when(Name %in% c("A", "B", "C") ~ "C1",
Name %in% c("D", "E") ~ "C2",
Name %in% c("F", "G") ~ "C3",
Name %in% c("H", "I") ~ "C4")) %>%
group_by(Name) %>%
summarise(A1 = sum(A1), A2 = sum(A2), A3 = sum(A3), x = mean(x), y = mean(y)) %>%
ungroup()