मेरे पास कुछ डेटा फ्रेम इस तरह दिखते हैं:

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

आइटम ए और सी में दो या दो से अधिक अलग-अलग प्रारंभ और अंत हो सकते हैं, लेकिन शेष कॉलम प्रत्येक समूह के अंदर समान होते हैं। क्या इस तरह की जानकारी को शुरू करने और रोकने का कोई तरीका है?

        chr start   end strand item
1        3 15,52 52,68      +     A
2        3    17    18      +     B
3        1  1,80 15,92      -     C

आपकी सहायताके लिए धन्यवाद!

r
1
l0110 4 अक्टूबर 2020, 22:43

1 उत्तर

सबसे बढ़िया उत्तर

हम 'chr', 'स्ट्रैंड', 'आइटम', और paste 'स्टार्ट', 'एंड' मानों को 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)
1
akrun 4 अक्टूबर 2020, 22:44