聚合 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="_")))
我需要导入一个 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="_")))