聚合 R 中多列的唯一值

Aggregate unique values from multiple columns in R

我需要导入一个 csv,并且在任何情况下,如果行具有所有相同的数据(仅 p 和 q 列除外),则必须合并这些行并在 p 和 q 中的值之间加上下划线。问题是大约有 40 列要分组。我正在尝试 R,因为文件大小可能很大,并且使用 powershell 之类的东西需要很长时间才能进行分组。我尝试的代码似乎适用于 5 行和 1 个副本,除了这两列,但更大的数据集未能产生我想要的结果。

例如...我在下面的示例和我的代码示例中删除了很多专栏,但希望您能理解:

a, b, c, d, p,q
ab,1,no,id,ad,43  
ab,3,zq,id,7a,23
ac,4,as,79,8d,2s
ad,3,zq,id,86,25
ac,3,zq,id,7a,af
b4,7,as,93,zz,aw
b4,7,as,93,32,al

需要像:

 a,b, c, d, p,q
ab,1,no,id,ad,43  
ab,3,zq,id,7a,23
ac,4,as,79,8d,2s
ad,3,zq,id,86_7a,25_af
b4,7,as,93,zz_32,aw_al

下面是我尝试使用 "dat" 作为数据框的内容,但它看起来很乱,而且结果似乎扭曲了输出 CSV 的格式。 q 和 p 结束在文件的末尾,并将包含数据行中的行,而不是聚合的列信息。

 dat <- read.csv(file ="Sample.csv", header= TRUE)
 library(dplyr)
 result <- dat %>%
 group_by(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,r,x,w,y,z,aa,bb,cc,dd,ee) %>% 
 summarise(p = paste(p, collapse = "_"),q = paste(q, collapse = "_")) %>%
 ungroup()
 write.csv(result, "test.csv",row.names=FALSE)

仅供参考-这是我第一次使用 R。

如果列是 character,一个选项是删除双引号,然后执行 group_by paste

library(tidyverse)
nm1 <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", 
      "m", "n", "o", "r", "x", "w", "y", "z", "aa", "bb", "cc", "dd", 
       "ee")
dat %>% 
   mutate_if(is.character, str_remove, '"') %>%
   group_by_at(vars(nm1)) %>%
   summarise_at(vars(p, q), list(~ paste(unique(.), collapse="_")))