合并数据帧重新排序列

时间:2018-08-16 06:37:43

标签: r dataframe merge

我有两个具有相同列名的数据帧(x,y)。例如FIRST,NAME1,NAME2,NAME3。我需要通过“ FIRST”列合并它们,但需要对其他列进行重新排序,例如:FIRST,NAME1.x,NAME1.y,NAME2.x,NAME2.y等。

x
FIRST   NAME1   NAME2   NAME3
q1  xxx xxx xxx
q2  xxx xxx xxx
q3  xxx xxx xxx
q4  xxx xxx xxx

y
FIRST   NAME1   NAME2   NAME3
  q1    yyy yyy yyy
  q2    yyy yyy yyy
  q3    yyy yyy yyy
  q4    yyy yyy yyy

如果我这样创建新的数据框:

df = merge(x,y, by = "FIRST")

我明白了

FIRST   NAME1.x NAME2.x NAME3.x NAME1.y NAME2.y NAME3.y
   q1   xxx      xxx     xxx     yyy     yyy    yyy
   q2   xxx      xxx     xxx     yyy     yyy    yyy
   q3   xxx      xxx     xxx     yyy     yyy    yyy
   q4   xxx      xxx     xxx     yyy     yyy    yyy

但是我想得到下一个结果:

FIRST   NAME1.x NAME1.y NAME2.x NAME2.y NAME3.x NAME3.y
  q1    xxx      yyy     xxx     yyy     xxx    yyy
  q2    xxx      yyy     xxx     yyy     xxx    yyy
  q3    xxx      yyy     xxx     yyy     xxx    yyy
  q4    xxx      yyy     xxx     yyy     xxx    yyy

仅对列进行重新排序不是解决方案,因为将来总会有x和y的列数不同。

2 个答案:

答案 0 :(得分:1)

您可以考虑在合并后对列进行重新排序:

df = merge(x,y, by = "FIRST")
df <- data.frame(FIRST = df$FIRST,
                 NAME1.x = df$NAME1.x,
                 NAME1.y = df$NAME1.y, 
                 NAME2.x = df$NAME2.x,
                 NAME2.y = df$NAME2.y, 
                 NAME3.x = df$NAME3.x,
                 NAME3.y = df$NAME3.y)

因此,您可以将列与所需的名称放在一起。

答案 1 :(得分:0)

您可以先使用dplyr个功能left_join(df1, df2, by = 'FIRST')然后使用

%>%
select(FIRST, NAME1.x, NAME1.y, NAME2.x, NAME2.y, NAME3.x, NAME3.y)

重新排序。管道使它一步步快乐。