标题可能有点令人困惑,但我想我可以在这里很好地解释它。
所以我今天一直在寻找解决这个问题的方法,但是没有一个类似于我的方法有效。
我需要根据分组变量("id")在列中创建所有可能的字符串对。列),然后也从另一列("X">
"Tissue"列由字符串组成,其他都是数字。
X是第一个字符串的值,X2是第二个
我的数据帧是这样的
<表类>
组织
ID
X
tbody><<tr>1 2 B1 3 C1 7 D2 4 2 2 B2 3 C2 7 表类>
这是一种使用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
第一个问题很好,解释得很好,提供了样本数据和预期输出。