Как насчет этого?
library(dplyr)
library(tidyr)
df.wide <- df %>%
mutate(
ID = factor(ID, levels = unique(.$ID[order(.$mutation)])),
subregion = factor(subregion, levels = unique(.$subregion[order(.$mutation)]))) %>%
group_by(ID, subregion) %>%
mutate(n = 1:n()) %>%
select(-mutation) %>%
spread(subregion, attribute) %>%
ungroup()
df.wide
## A tibble: 32 x 31
# ID n `OR4F5:E1:E1` `SAMD11:E2:E2` `NOC2L:E5:E5` `NOC2L:E4:E4`
# <fct> <int> <dbl> <dbl> <dbl> <dbl>
# 1 TCGA… 1 1.01 NA NA NA
# 2 TCGA… 1 NA 1.00 NA NA
# 3 TCGA… 1 NA NA 1.44 NA
# 4 TCGA… 1 NA NA NA 1.17
# 5 TCGA… 2 NA NA NA 1.17
# 6 TCGA… 1 NA NA NA NA
# 7 TCGA… 1 NA NA NA NA
# 8 TCGA… 1 NA NA NA NA
# 9 TCGA… 1 NA NA NA NA
#10 TCGA… 1 NA NA NA NA
## … with 22 more rows, and 25 more variables: `KLHL17:E3:E3` <dbl>,
## `KLHL17:E5:E5` <dbl>, `KLHL17:E8:E8` <dbl>, `KLHL17:E9:E9` <dbl>,
## `PLEKHN1:E1:E1` <dbl>, `PLEKHN1:E5:E5` <dbl>, `PLEKHN1:E12:E12` <dbl>,
## `HES4:E3:E3` <dbl>, `ISG15:E2:E2` <dbl>, `AGRN:E2:E2` <dbl>,
## `AGRN:E3:E3` <dbl>, `AGRN:E4:E4` <dbl>, `AGRN:E8:E8` <dbl>,
## `AGRN:E25:E25` <dbl>, `AGRN:E29:E29` <dbl>, `AGRN:E36:E36` <dbl>,
## `TTLL10:E13:E13` <dbl>, `SDF4:E4:E4` <dbl>, `SDF4:E2:E2` <dbl>,
## `UBE2J2:E7:E7` <dbl>, `SCNN1D:E1:E1` <dbl>, `SCNN1D:E6:E6` <dbl>,
## `SCNN1D:E7:E7` <dbl>, `SCNN1D:E11:E11` <dbl>, `ACAP3:E22:E22` <dbl>
Мы явно упорядочиваем factor
уровни для ID
и subregion
по mutation
и добавляем столбец n
, в котором отслеживаются дубликатыID
+ subregion
строк.Остальное - это просто изменение формы от длинного до широкого.
Обновление
Суммирование attribute
значений для повторяющихся значений ID
+ subregion
немного меняет формулировку проблемы;в этом случае вы можете сделать
df.wide <- df %>%
mutate(
ID = factor(ID, levels = unique(.$ID[order(.$mutation)])),
subregion = factor(subregion, levels = unique(.$subregion[order(.$mutation)]))) %>%
group_by(ID, subregion) %>%
summarise(attribute = sum(attribute)) %>%
spread(subregion, attribute) %>%
ungroup()
df.wide
## A tibble: 30 x 30
# ID `OR4F5:E1:E1` `SAMD11:E2:E2` `NOC2L:E5:E5` `NOC2L:E4:E4` `KLHL17:E3:E3`
# <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 TCGA… 1.01 NA NA NA NA
# 2 TCGA… NA 1.00 NA NA NA
# 3 TCGA… NA NA 1.44 NA NA
# 4 TCGA… NA NA NA 2.34 NA
# 5 TCGA… NA NA NA NA 2.18
# 6 TCGA… NA NA NA NA NA
# 7 TCGA… NA NA NA NA NA
# 8 TCGA… NA NA NA NA NA
# 9 TCGA… NA NA NA NA NA
#10 TCGA… NA NA NA NA NA
## … with 20 more rows, and 24 more variables: `KLHL17:E5:E5` <dbl>,
## `KLHL17:E8:E8` <dbl>, `KLHL17:E9:E9` <dbl>, `PLEKHN1:E1:E1` <dbl>,
## `PLEKHN1:E5:E5` <dbl>, `PLEKHN1:E12:E12` <dbl>, `HES4:E3:E3` <dbl>,
## `ISG15:E2:E2` <dbl>, `AGRN:E2:E2` <dbl>, `AGRN:E3:E3` <dbl>,
## `AGRN:E4:E4` <dbl>, `AGRN:E8:E8` <dbl>, `AGRN:E25:E25` <dbl>,
## `AGRN:E29:E29` <dbl>, `AGRN:E36:E36` <dbl>, `TTLL10:E13:E13` <dbl>,
## `SDF4:E4:E4` <dbl>, `SDF4:E2:E2` <dbl>, `UBE2J2:E7:E7` <dbl>,
## `SCNN1D:E1:E1` <dbl>, `SCNN1D:E6:E6` <dbl>, `SCNN1D:E7:E7` <dbl>,
## `SCNN1D:E11:E11` <dbl>, `ACAP3:E22:E22` <dbl>
Пример данных
df <- read.table(text =
'"ID" "subregion" "mutation" "attribute"
"1" "TCGA-AN-A046" "OR4F5:E1:E1" 69767 1.00849961637455
"2" "TCGA-A2-A0CP" "SAMD11:E2:E2" 925952 1.00346517231111
"3" "TCGA-A8-A08H" "NOC2L:E5:E5" 956126 1.43669428919156
"4" "TCGA-GM-A2DM" "NOC2L:E4:E4" 956911 1.1679575001733
"5" "TCGA-GM-A2DM" "NOC2L:E4:E4" 956912 1.1679575001733
"6" "TCGA-D8-A1XM" "KLHL17:E3:E3" 961658 2.17848956802821
"7" "TCGA-BH-A18G" "KLHL17:E5:E5" 962441 48.0640560165975
"8" "TCGA-3C-AALI" "KLHL17:E8:E8" 963353 40.6525553849528
"9" "TCGA-AC-A62Y" "KLHL17:E9:E9" 964004 2.89875813313313
"10" "TCGA-AR-A2LE" "PLEKHN1:E1:E1" 966556 1.03540263019699
"11" "TCGA-E2-A14N" "PLEKHN1:E5:E5" 970728 21.8246585021196
"12" "TCGA-AO-A0J4" "PLEKHN1:E12:E12" 973506 1.24409284966302
"13" "TCGA-D8-A1J9" "HES4:E3:E3" 999551 1.24409284966302
"14" "TCGA-EW-A1PH" "ISG15:E2:E2" 1014276 72.4814235432147
"15" "TCGA-A2-A0T0" "AGRN:E2:E2" 1022338 21.8246585021196
"16" "TCGA-GM-A2DD" "AGRN:E3:E3" 1035303 1.06314569745364
"17" "TCGA-5L-AAT1" "AGRN:E4:E4" 1040690 1.24409284966302
"18" "TCGA-OL-A5RW" "AGRN:E8:E8" 1043314 2.20878819659627
"19" "TCGA-D8-A27M" "AGRN:E25:E25" 1049355 1.45844645372491
"20" "TCGA-AR-A1AI" "AGRN:E29:E29" 1050430 1.16479379564338
"21" "TCGA-5L-AAT0" "AGRN:E36:E36" 1055374 7.09932582548073
"22" "TCGA-5L-AAT0" "AGRN:E36:E36" 1055376 7.09932582548073
"23" "TCGA-C8-A8HP" "AGRN:E36:E36" 1055442 7.09932582548073
"24" "TCGA-A7-A4SD" "TTLL10:E13:E13" 1184971 1.24409284966302
"25" "TCGA-BH-A1F0" "SDF4:E4:E4" 1223283 1.46091816304331
"26" "TCGA-AO-A128" "SDF4:E4:E4" 1223330 1.46091816304331
"27" "TCGA-E9-A1R0" "SDF4:E2:E2" 1228592 3.86565576505924
"28" "TCGA-A2-A04P" "UBE2J2:E7:E7" 1255246 33.795587162655
"29" "TCGA-C8-A274" "UBE2J2:E7:E7" 1255342 33.795587162655
"30" "TCGA-5L-AAT1" "SCNN1D:E1:E1" 1281422 1.24409284966302
"31" "TCGA-AO-A128" "SCNN1D:E6:E6" 1287116 1.06314569745364
"32" "TCGA-E2-A15R" "SCNN1D:E7:E7" 1287596 2.89179279138711
"33" "TCGA-AC-A62V" "SCNN1D:E11:E11" 1290543 74.0747402078337
"34" "TCGA-BH-A18V" "ACAP3:E22:E22" 1294187 2.21398621447599', header = T)