#r
#r
Вопрос:
У меня есть несколько фреймов данных, которые выглядят так:
data.frame(chr=c(3,3,3,1,1),start=c(15,52,17,1,80),end=c(52,68,18,15,92),strand=c(" "," "," ","-","-"),item=c("A","A","B","C","C"))
chr start end strand item
1 3 15 52 A
2 3 52 68 A
3 3 17 18 B
4 1 1 15 - C
5 1 80 92 - C
Элементы A и C могут иметь два или более разных начала и окончания, но остальные столбцы одинаковы внутри каждой группы. Есть ли способ объединить начальную и конечную информацию таким образом?
chr start end strand item
1 3 15,52 52,68 A
2 3 17 18 B
3 1 1,80 15,92 - C
Спасибо за вашу помощь!
Ответ №1:
Мы можем группировать по значениям ‘chr’, ‘strand’, ‘item’ и paste
‘start’, ‘end’ с toString
помощью (=> paste(., collapse=", ")
)
library(dplyr)
df1 %>%
group_by(chr, strand, item) %>%
summarise(across(c(start, end), toString), .groups = 'drop') %>%
arrange(item)
-вывод
# A tibble: 3 x 5
# chr strand item start end
# <dbl> <chr> <chr> <chr> <chr>
#1 3 A 15, 52 52, 68
#2 3 B 17 18
#3 1 - C 1, 80 15, 92
Или base R
с помощью aggregate
aggregate(cbind(start, end) ~ ., df1, toString)