在保持完整性的同时,基于第三列重新排序第一列和第二列

时间:2014-04-02 17:50:14

标签: r sorting dataframe

我试图根据第三列排序两列。也许它更像是重新排序。

虚拟数据

df <- as.data.frame(rbind(c('kex','id1A','id3B'),
                          c('sex','id1B','id1A'),
                          c('hex','id2A','id3C'),
                          c('flex','id3A','id1B'),
                          c('snex','id3B','ID2A'),
                          c('dex','id3C','id3A')))

第一列中的项目与第二列中的项目相关联。第三列包括与第二列相同的项目,但顺序不同。我想(重新)根据第三列订购第一列和第二列,同时保持其订单完好无损。它基本上是重新排列第二个(和第一个动态)列,所以它(它们)匹配第三个。

输出看起来像这样;

>df
V1   V2   V3
1 snex id3B id3B
2  kex id1A id1A
3  dex id3C id3C
4  sex id1B id1B
5  hex id2A ID2A
6 flex id3A id3A

任何指针都会受到高度赞赏,谢谢!

2 个答案:

答案 0 :(得分:4)

尝试使用rankcbind

> cbind(df[rank(df$V3), -3], V3=df$V3)
    V1   V2   V3
5 snex id3B id3B
1  kex id1A id1A
6  dex id3C id3C
2  sex id1B id1B
3  hex id2A ID2A
4 flex id3A id3A

答案 1 :(得分:-3)

也许

cbind(df[with(df,order(V3)),c(1,2)], df[,3])
    V1   V2 df[, 3]
2  sex id1B    id3B
4 flex id3A    id1A
5 snex id3B    id3C
6  dex id3C    id1B
1  kex id1A    ID2A
3  hex id2A    id3A