R根据另一列中的组ID创建一个包含所有可能的字符串对的新列,然后通过这些字符串对将第3个col.拆分为2个col..&l



标题可能有点令人困惑,但我想我可以在这里很好地解释它。

所以我今天一直在寻找解决这个问题的方法,但是没有一个类似于我的方法有效。

我需要根据分组变量("id")在列中创建所有可能的字符串对。列),然后也从另一列("X">

"Tissue"列由字符串组成,其他都是数字。

X是第一个字符串的值,X2是第二个

我的数据帧是这样的

<表类> 组织 ID X tbody><<tr>12B13C17D2422B23C27

这是一种使用slice()combn()扩大数据和从那里只是一种创造一些分组变量和连接Tissue和重塑宽格式。

library(dplyr)
library(tidyr)
dat %>%
group_by(ID) %>%
slice(c(combn(seq(n()), min(n(), 2)))) %>%
mutate(ID2 = (row_number()-1) %/% 2,
lab = paste0("X", rep(1:2, length.out = n()))) %>%
group_by(ID, ID2) %>%
mutate(Tissue = paste(Tissue, collapse = " / ")) %>%
pivot_wider(id_cols = -ID2, values_from = X, names_from = lab) %>%
ungroup()
# A tibble: 10 × 4
Tissue                               ID         X1      X2
<chr>                                <chr>   <dbl>   <dbl>
1 Testis / Prostate                    1     -0.0423 -0.0160
2 Testis / Colon - Transverse          1     -0.0423  0.0654
3 Prostate / Colon - Transverse        1     -0.0160  0.0654
4 Whole Blood / Kidney - Cortex        2      0.0509 -0.0165
5 Whole Blood / Prostate               2      0.0509  0.0128
6 Kidney - Cortex / Prostate           2     -0.0165  0.0128
7 Kidney - Cortex / Colon - Transverse 3     -0.0215  0.139 
8 Kidney - Cortex / Testis             3     -0.0215 -0.0390
9 Colon - Transverse / Testis          3      0.139  -0.0390
10 Kidney - Cortex                      4     -0.0182 NA  

第一个问题很好,解释得很好,提供了样本数据和预期输出。

相关内容