首页 > 解决方案 > 根据 R 中的列名聚合列

问题描述

我在 R 中有这个数据框

Party Pro2005 Anti2005 Pro2006 Anti2006 Pro2007 Anti2007
R       1       18       0        7       2       13   
R       1       19       0        7       1       14   

D      13        7       3        4      10        5 
D      12        8       3        4       9        6  

我想将它聚合到它将基于政党的所有优点和反面结合起来的地方

例如

Party ProSum AntiSum
R.     234.   245
D.     234.   245

我将如何在 R 中做到这一点?

标签: r

解决方案


我会建议一种tidyverse重塑数据和计算值总和的方法:

library(tidyverse)
#Data
df <- structure(list(Party = c("R", "R", "D", "D"), Pro2005 = c(1L, 
1L, 13L, 12L), Anti2005 = c(18L, 19L, 7L, 8L), Pro2006 = c(0L, 
0L, 3L, 3L), Anti2006 = c(7L, 7L, 4L, 4L), Pro2007 = c(2L, 1L, 
10L, 9L), Anti2007 = c(13L, 14L, 5L, 6L)), class = "data.frame", row.names = c(NA, 
-4L)) 

编码:

df %>% pivot_longer(cols = -1) %>%
  #Format strings
  mutate(name=gsub('\\d+','',name)) %>%
  #Aggregate
  group_by(Party,name) %>% summarise(value=sum(value,na.rm=T)) %>%
  pivot_wider(names_from = name,values_from=value)

输出:

# A tibble: 2 x 3
# Groups:   Party [2]
  Party  Anti   Pro
  <chr> <int> <int>
1 D        34    50
2 R        78     5

推荐阅读