【发布时间】:2019-10-02 22:26:54
【问题描述】:
我需要导入一个 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。
【问题讨论】:
-
不清楚您的代码为什么不起作用。你需要
summarise_at(vars(p, q), paste, collapse="_") -
我认为您应该使用
read.csv阅读此内容。使用这种方式可能更容易。 -
对不起,我确实 read.csv 并写了,只是没有包括那部分。修改了代码。
-
@akrun ,我可能已经解决了格式问题。我开始认为我所做的确实有效,但是我的 .csv 文件有时包含双引号作为值。当我再次编写 csv 时,它会在该双引号之后使用任何内容并创建一个子行......试图弄清楚如何解决这个问题。
-
不确定是不是写入数据的结果。当你写数据时,试试
write.csv(..., quote = FALSE)。如果你有双引号,那么dat %>% mutate_if(is.character, str_remove, '"') %>%
标签: r concatenation grouping aggregation large-data