r - 聚合 R 中多列的唯一值

标签 r concatenation grouping aggregation large-data

我需要导入一个 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。

最佳答案

如果该列是字符,则可以选择删除双引号,然后执行group_by 粘贴

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="_")))

关于r - 聚合 R 中多列的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56155060/

相关文章:

java - 使用身份验证从 JAVA 连接到 RServe

r - 操作嵌套数据

r - R函数每n个字开始换行吗?

python - 如何使用 numpy 将数组拆分为不同维度的子数组?

c - 如何将字符串与带有点的 C 预处理器连接起来?

r - 控制 grid.layout 中的内部图形边距

javascript - 如何连接两个 JavaScript 变量和正则表达式

python - 对数据框的一列进行分箱后,如何创建一个新的数据框来计算每个箱中的元素数量?

ruby-on-rails - 在相似时间戳创建的组结果

Java 8 一对多分组