Добавление номера в каждой группе для каждой выборки в R

#r

#r

Вопрос:

У меня есть 27 образцов, но для каждого из них у меня разное количество неоантигенов, рассчитанных на 3 группы, такие как

 > head(data)
             Sample Total Total_WB Total_SB
1 LP6008334-DNA_A03   884      608      276
2 LP6008334-DNA_A03    88       66       22
3 LP6008334-DNA_A03     0        0        0
4 LP6008334-DNA_A03   715      485      230
5 LP6008334-DNA_A03   698      470      228
6 LP6008334-DNA_A03     0        0        0
> unique(data$Sample)
 [1] "LP6008334-DNA_A03" "LP6008334-DNA_A04" "LP6008334-DNA_B02" "LP6008334-DNA_C02"
 [5] "LP6008334-DNA_D02" "LP6008336-DNA_F02" "LP6008336-DNA_G01" "LP6008336-DNA_H01"
 [9] "LP6008337-DNA_A07" "LP6008337-DNA_H06" "LP6008460-DNA_A04" "LP6008460-DNA_D01"
[13] "LP6008460-DNA_F02" "LP6008460-DNA_G03" "SLX-18929_UDP0015" "SLX-18929_UDP0018"
[17] "SLX-18929_UDP0024" "SLX-18929_UDP0030" "SLX-18929_UDP0059" "SLX-18929_UDP0067"
[21] "SLX-18929_UDP0080" "SLX-18929_UDP0086" "SLX-18929_UDP0094" "LP6005334"        
[25] "LP6005500"         "LP6007600"         "LP6008202"        
> 

> dim(data)
[1] 5940    4
>
 

Я хочу иметь 27 образцов в строках и добавить neoantigen для каждого образца перед этим

Как я могу это сделать в R?

Ответ №1:

Если нам нужно сгруппировать по сумме

 library(dplyr)
data %>%
    group_by(Sample) %>% 
    summarise(across(starts_with("Total"), sum, na.rm = TRUE), .groups = 'drop')
 

Если он должен быть преобразован в широкий формат

 library(data.table)
library(dplyr)
library(tidyr)
data %>% 
   mutate(rn = rowid(Sample)) %>% 
   pivot_wider(names_from = rn, values_from = c(Total, Total_WB, Total_SB))
 

данные

 data <- structure(list(Sample = c("LP6008334-DNA_A03", "LP6008334-DNA_A03", 
"LP6008334-DNA_A03", "LP6008334-DNA_A03", "LP6008334-DNA_A03", 
"LP6008334-DNA_A03"), Total = c(884L, 88L, 0L, 715L, 698L, 0L
), Total_WB = c(608L, 66L, 0L, 485L, 470L, 0L), Total_SB = c(276L, 
22L, 0L, 230L, 228L, 0L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))