首页 > 解决方案 > 在 R 中折叠重复项,其中只有唯一的列值被连接

问题描述

我需要折叠一个大表(V19 为 5M),在其中我根据特定列(V1)删除重复项,如果唯一,则合并所有其他列的值(如果不是,则只报告一次结果)。

我从这里尝试了一些解决方案,但这些示例主要针对 2 个变量执行 - 我有 19 个。最终发生的情况是,表的整个其余部分都合并在一个数字列表列中。

输入:

V1         V2         V3         V4         V5         V6
TR1000     chr1       1000       1200       A          + 
TR1000     chr1       1000       1200       B          + 
TR1000     chr1       1000       1200       C          +  
TR2000     chr2       2000       2500       D          +   
TR2000     chr2       2000       2500       E          + 
TR3000     chr3       3000       3500       F          +  

我需要:

V1         V2         V3         V4         V5         V6
TR1000     chr1       1000       1200       A, B, C    + 
TR2000     chr2       2000       2500       D, E       +  
TR3000     chr3       3000       3500       F          + 

标签: rdataframeaggregate

解决方案


使用dplyr.

library(dplyr)

dat2 <- dat %>%
  group_by_at(vars(-V5)) %>%
  summarize(V5 = toString(V5)) %>%
  ungroup() %>%
  select(names(dat))
dat2
# # A tibble: 3 x 6
#   V1     V2       V3    V4 V5      V6   
#   <chr>  <chr> <int> <int> <chr>   <chr>
# 1 TR1000 chr1   1000  1200 A, B, C +    
# 2 TR2000 chr2   2000  2500 D, E    +    
# 3 TR3000 chr3   3000  3500 F       +    

数据

dat <- read.table(text = "V1         V2         V3         V4         V5         V6
TR1000     chr1       1000       1200       A          + 
TR1000     chr1       1000       1200       B          + 
TR1000     chr1       1000       1200       C          +  
TR2000     chr2       2000       2500       D          +   
TR2000     chr2       2000       2500       E          + 
TR3000     chr3       3000       3500       F          +  ",
                  header = TRUE, stringsAsFactors = FALSE)

推荐阅读