Свертывание дубликатов в R, где объединяются только уникальные значения столбцов - PullRequest
0 голосов
/ 30 января 2019

Мне нужно свернуть большую таблицу (5M на V19), где я удаляю дубликаты на основе определенного столбца (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          + 

Ответы [ 2 ]

0 голосов
/ 30 января 2019

A data.table опция:

library(data.table)
setDT(dat)
byCols <- setdiff(names(dat), "V5")
dat[, .(v5 = toString(V5)),  by = byCols]

       V1   V2   V3   V4 V6      v5
1: TR1000 chr1 1000 1200  + A, B, C
2: TR2000 chr2 2000 2500  +    D, E
3: TR3000 chr3 3000 3500  +       F
0 голосов
/ 30 января 2019

Решение с использованием 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)
...