我有三个数据帧,每个数据帧的标识符为行名,索引为列值。我想用
将这三个绑定在一起all_indexes <- cbind(res_RNA_1,res_RNA_2,res_RNA_3)
但这会使res_RNA_2
和res_RNA_3
的列值与res_RNA_2
相同。下面是数据帧的头部
> head(res_RNA_1)
index_1
ENSG00000259884 1
ENSG00000166888 2
ENSG00000259954 3
ENSG00000228509 4
ENSG00000266658 5
ENSG00000267598 6
> head(res_RNA_2)
index_2
ENSG00000123358 1
ENSG00000158050 2
ENSG00000120738 3
ENSG00000137312 4
ENSG00000137331 5
ENSG00000131196 6
> head(res_RNA_3)
index_3
ENSG00000123358 1
ENSG00000138166 2
ENSG00000119508 3
ENSG00000158050 4
ENSG00000120738 5
ENSG00000166886 6
和
> head(all_indexes)
res_RNA_1 res_RNA_2 res_RNA_3
ENSG00000259884 1 1 1
ENSG00000166888 2 2 2
ENSG00000259954 3 3 3
ENSG00000228509 4 4 4
ENSG00000266658 5 5 5
ENSG00000267598 6 6 6
当我查看顶行并执行res_RNA_2["ENSG00000259884",]
时,我得到[1] 50491
,因此它与res_RNA_2
和res_RNA_3
的值相同res_RNA_1
1}}。
我用下面的代码测试了它,这确实做了我期望的事情。但是,我无法在上面找到与以下简单代码不同的内容。
> test1 <- data.frame(c(1,2,3),row.names=c('a','b','c'))
> test2 <- data.frame(c(2,1,3),row.names=c('a','b','c'))
> test3 <- data.frame(c(3,2,1),row.names=c('a','b','c'))
> test_cbind <- cbind(test1,test2,test3)
> test_cbind
c.1..2..3. c.2..1..3. c.3..2..1.
a 1 2 3
b 2 1 2
c 3 3 1
答案 0 :(得分:0)
据推测,您实际上需要合并,以便标识符值与其&#34;索引值&#34;保持一致,因此这样的事情可能更有用:
all_indexes <- do.call('merge', list(res_RNA_1,res_RNA_2,res_RNA_3, by='rownames') )
如果没有一个好的测试对象,我不知道这是否正确,但我知道SO上有多个工作示例。因此,我使用了您的测试对象,并将rownames的顺序解压缩,以匹配问题的复杂性:
test1 <- data.frame(c(1,2,3),row.names=c('a','b','c'))
test2 <- data.frame(c(7,9,12),row.names=c('b','c','a'))
test3 <- data.frame(c(20, 30, 40),row.names=c('c','b','a'))
Reduce(function(x,y) {temp <- merge(x,y,by='row.names');
rownames(temp) <- temp[['Row.names']] # put back rownames as rownames
temp[-1]}, # removes the column "Row.names'
list(test1,test2,test3) )
c.1..2..3. c.7..9..12. c.20..30..40.
a 1 12 40
b 2 7 30
c 3 9 20