R data.table объединяет повторяющиеся строки и объединяет уникальные значения - PullRequest
2 голосов
/ 19 апреля 2020

Я пытаюсь объединить дублирующиеся строки, используя агрегат data.table, но мне нужно выяснить, как объединить недублированные столбцы как строки в выводе:

dt = data.table(
  ensembl_id=c("ENSRNOG00000055068", "ENSRNOG00000055068", "ENSRNOG00000055068"),
  hsapiens_ensembl_id=c("ENSG00000196262", "ENSG00000236334", "ENSG00000263353"),
  chr=c(14, 14, 14),
  start=c(22706901, 22706901, 22706901),
  hsapiens_symbol=c("PPIA", "PPIAL4G", "PPIAL4A"),
  hsapiens_chr=c(7, 1, 1)
)
dt[, lapply(.SD, paste(...,sep=",")), by=ensembl_id] # <- need magic join/paste function

желаемый вывод:

           ensembl_id                             hsapiens_ensembl_id chr    start      hsapiens_symbol hsapiens_chr
1: ENSRNOG00000055068 ENSG00000196262,ENSG00000236334,ENSG00000263353  14 22706901 PPIA,PPIAL4G,PPIAL4A        7,1,1

1 Ответ

2 голосов
/ 19 апреля 2020

Мы можем использовать collapse с paste вместо sep и включать 'chr', 'start' также в качестве переменных группировки

library(data.table)
dt[, lapply(.SD, paste, collapse=","), by = .(chr, start, ensembl_id)]

Или более компактно, с toString

dt[, lapply(.SD, toString), by = .(chr, start, ensembl_id)]

Если есть дубликаты, получить значения unique и paste

dt[, lapply(.SD, function(x) toString(unique(x))), by = .(chr, start, ensembl_id)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...