问题描述
我有两个列名和行名相同的数据框。我想按行合并它们,但列需要从 df$x 和 df$y 开始并排。
到目前为止我尝试过但没有按要求获得输出。
merge(df.test1,df.test2,by.x = "V1",by.y = "V1")
V1 2800M_15-0.5-1.x 2800M_15-0.5-2.x 2800M_15-0.5-3.x cA_15-0.5-1.x cA_15-0.5-2.x 2800M_15-0.5-1.y 2800M_15-0.5-2.y 2800M_15-0.5-3.y cA_15-0.5-1.y cA_15-0.5-2.y
1 RowA 1 1 1 1 1 1 1 1 1 1
2 RowB 1 1 1 1 1 1 1 1 1 1
3 RowC 1 1 1 1 1 1 1 1 1 1
所需输出
V1 2800M_15-0.5-1.x 2800M_15-0.5-1.y 2800M_15-0.5-2.x 2800M_15-0.5-2.y 2800M_15-0.5-3.x 2800M_15-0.5-3.y cA_15-0.5-1.x cA_15-0.5-1.y cA_15-0.5-2.x cA_15-0.5-2.y
1 RowA 1 1 1 1 1 1 1 1 1 1
2 RowB 1 1 1 1 1 1 1 1 1 1
3 RowC 1 1 1 1 1 1 1 1 1 1
解决方法
一个选项是根据名称重新排序列,即列名称子串上的 order
没有 .x
或 .y
末尾,并使用顺序索引作为用于重新排列列的列索引
out <- merge(df.test1,df.test2,by.x = "V1",by.y = "V1")
out1 <- out[c(1,order(sub("\\.[xy]$","",names(out)[-1])) + 1)]