我想要合并多个数据集,这样我就可以拥有相同的基因 snp,但对于其他值,它们是不同的。
combined_data <- Reduce(function(x, y) merge(x, y, by = c("SNP", "Gene"), all = TRUE),
list(dt_cluster0, dt_cluster1))
这是输入:
> dt_cluster0[dt_cluster0$SNP == "chr1_11999355_C_T",]
SNP Gene BETA_cluster_0 SE_cluster_0
1: chr1_11999355_C_T ENSG00000116688 -0.001939400 0.000476767
2: chr1_11999355_C_T ENSG00000116688 -0.000307912 0.000337024
> dt_cluster1[dt_cluster1$SNP == "chr1_11999355_C_T",]
SNP Gene BETA_cluster_1 SE_cluster_1
1: chr1_11999355_C_T ENSG00000116688 -0.001939400 0.000476767
2: chr1_11999355_C_T ENSG00000116688 -0.000307912 0.000337024
我得到的输出是这样的:
combined_data[combined_data$SNP == "chr1_11999355_C_T",]
SNP Gene BETA_cluster_0 SE_cluster_0 BETA_cluster_1 SE_cluster_1
1: chr1_11999355_C_T ENSG00000116688 -0.001939400 0.000476767 -0.001939400 0.000476767
2: chr1_11999355_C_T ENSG00000116688 -0.001939400 0.000476767 -0.000307912 0.000337024
3: chr1_11999355_C_T ENSG00000116688 -0.000307912 0.000337024 -0.001939400 0.000476767
4: chr1_11999355_C_T ENSG00000116688 -0.000307912 0.000337024 -0.000307912 0.000337024
但我想要的是更多:
SNP Gene BETA_cluster_0 SE_cluster_0. BETA_cluster_1 SE_cluster_1
chr1_11999355_C_T ENSG00000116688 -0.001939400 0.000476767 -0.001939400 0.000476767
chr1_11999355_C_T ENSG00000116688 -0.000307912 0.000337024. -0.000307912 0.000337024
我不想拥有所有可能的组合。有人有什么建议吗?
您需要将 first
data.frame()
作为 init=
参数传递给Reduce,否则它会在第一次迭代时与自身合并:
df1 <- expand.grid(G1 = LETTERS[1:3],
G2 = letters[4:5])
df3 <- df2 <- df1
df1$x1 <- rnorm(6)
df1$y1 <- rnorm(6, 10)
df2$x2 <- rnorm(6, 100)
df2$y2 <- rnorm(6, 1000)
df3$x3 <- rnorm(6, 500)
df3$y3 <- rnorm(6, 5000)
Reduce(\(x, y) merge(x, y, all = TRUE),
init = df1,
list(df2, df3))
G1 G2 x1 y1 x2 y2 x3 y3
1 A d -0.07976726 8.701670 102.15779 1000.8781 501.3432 4999.853
2 A e 0.57344392 11.062822 103.35576 998.5833 499.8316 4998.851
3 B d -0.18535187 9.879264 100.08262 999.5475 500.9023 4999.267
4 B e -0.29633928 10.387066 98.59180 1001.3854 500.2781 5001.993
5 C d 1.15221959 10.391293 99.72066 999.7736 500.1438 4998.851
6 C e -0.13812669 11.219912 98.96838 1000.9077 499.3424 4999.576