我有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个”。有什么想法吗?
答案 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()中,但是你可以在代码中间看到答案。)