我有两个相同的数据框。相同的列和行标题。一个具有相关性,一个具有p值。我想以交错的方式合并这两个表,以便第一列是相关性,下一个是p值,下一个是相关性等。
因此,如果表1的列是A1,A2,A3 ......和表2是B1,B2,B3 ...我希望结束表是A1,B1,A2,B2,A3,B3 .. ..
我已尝试过cbind,但这会将所有相关列放在首先是所有p值列。没有交错。
我想知道是否有一种简单的方法。
感谢您的帮助!
答案 0 :(得分:6)
你迈出了第一步,即cbind
。假设您的数据框为d1
,其中n列为A1, A2, ...,An
,d1
为n列B1, B2, ..., Bn
。然后d <- cbind(d1, d2)
将为您提供包含您想要的所有信息的数据框,您只需要重新排序其列。这相当于生成向量(1,(n + 1),2,(n + 2),...,n,2n)以索引数据帧列。您可以s <- rep(1:n, each = 2) + (0:1) * n
执行此操作。最后,您想要的数据框是d[s]
。
答案 1 :(得分:0)
此外,如果尺寸相同,请创建索引
rbind(colnames(dataframe1), colnames(dataframe2))
例如:
set.seed(1)
d1 <- setNames(as.data.frame(matrix(sample(1:10,20, replace=T),5,5)), paste0("A",1:5))
d2 <- setNames(as.data.frame(matrix(sample(1:10,20, replace=T),5,5)), paste0("B",1:5))
d <- cbind(d1,d2)
indx <- rbind(names(d1),names(d2))
d[,indx]
# A1 B1 A2 B2 A3 B3 A4 B4 A5 B5
#1 3 10 9 4 3 5 5 7 3 10
#2 4 3 10 1 2 6 8 8 4 3
#3 6 7 7 4 7 5 10 2 6 7
#4 10 2 7 9 4 2 4 8 10 2
#5 3 3 1 4 8 9 8 5 3 3
答案 2 :(得分:0)
类似于@akrun的答案,但使用索引而不是名称
#create indexes for the desired order
x <- order(c(1:ncol(d1), 1:ncol(d2)))
x
#[1] 1 6 2 7 3 8 4 9 5 10
#cbind d1 and d2, interleaving columns with x
d <- cbind(d1, d2)[,x]