R 为什么我的cbind不保存列位置?

R 为什么我的cbind不保存列位置?,r,dataframe,cbind,R,Dataframe,Cbind,我有三个数据帧,每个数据帧都有一个标识符作为行名,一个索引作为列值。我想用绳子把这三个绑在一起 all_indexes <- cbind(res_RNA_1,res_RNA_2,res_RNA_3) 及 当我查看顶行并执行res_RNA_2[ENSG0000259884]时,我得到[1]50491,因此它给res_RNA_2和res_RNA_3的值与给res_RNA_1的值相同 我用下面的代码对它进行了测试,这符合我的预期。但是,我找不到我在上面所做的与在下面的简单代码中所做的不同之处

我有三个数据帧,每个数据帧都有一个标识符作为行名,一个索引作为列值。我想用绳子把这三个绑在一起

all_indexes <- cbind(res_RNA_1,res_RNA_2,res_RNA_3)

当我查看顶行并执行res_RNA_2[ENSG0000259884]时,我得到[1]50491,因此它给res_RNA_2和res_RNA_3的值与给res_RNA_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

假设您实际上需要合并,以便标识符值与其索引值保持一致,因此类似的内容可能更有用:

all_indexes <- do.call('merge', list(res_RNA_1,res_RNA_2,res_RNA_3, by='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
all_indexes <- do.call('merge', list(res_RNA_1,res_RNA_2,res_RNA_3, by='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