#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"))