使用R for循环从数据框创建不同的矩阵

时间:2017-06-05 05:37:54

标签: r loops for-loop matrix dataframe

我有2个数据框(df 1和2),它们具有以下结构:

CHR SNP A1 A2 FAM CA1 CA2
1 rs3818361 A G 0.35 7 13
2 rs7561528 A G 0.2 4 16
2 rs6733839 T C 0.45 9 11
2 rs744373 G A 0.45 9 11
2 rs35349669 T C 0.35 7 13
...

它们有7列和41行(不计算列号行)。使用每个数据帧的列CA1和CA2,我必须构建2x2矩阵,如下所示:

[CA1 from df1] [CA2 from df1] #first row CA1 and CA2 from df1
[CA1 from df2] [CA2 from df2] #first row CA1 and CA2 from df2

[CA1 from df1] [CA2 from df1] #second row CA1 and CA2 from df1
[CA1 from df2] [CA2 from df2] #second row CA1 and CA2 from df2

[CA1 from df1] [CA2 from df1] #third row CA1 and CA2 from df1
[CA1 from df2] [CA2 from df2] #third row CA1 and CA2 from df2

我考虑过for循环(我在1:41),但我很难巩固这个想法。

for (i in 1:41) {
do
datai <- c(df1[i,7],df1[i,8],df2[i,7],df2[i,8])
matrixi <- matrix(datai, nrow=2, ncol=2, byrow=TRUE)
}

我希望循环生成41个矩阵。我放在矩阵和数据(datai和matrixi)的“i”表示“我想要其中的41个”。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

var <- c("CA1", "CA2")
lapply(seq(nrow(df1)), function(x) rbind(df1[x,var], df2[x,var]))

答案 1 :(得分:1)

我们可以使用Map

Map(rbind, split(df1[c('CA1', 'CA2')], 1:nrow(df1)), 
                 split(df2[c('CA1', 'CA2')], 1:nrow(df2)))

答案 2 :(得分:0)

即使您的答案有效,我也会向我实验室的某位工作人员寻求帮助,但也可以使用其他方法。在这里,我给你答案,以防有人帮助:

首先,将我需要的所有7个dfs的所有列合并到一个数据帧中:称为“counts”。在计数中,结构是这样的:

argsStr

所以,我想

testtest

(我希望矩阵进行chisq测试...这就是为什么它在chisq.test()中,但是你可以在代码中间看到答案。)