首页 文章

根据colnames列表排序

提问于
浏览
2

我有一个第一个data.frame看起来像这样:

DF1 a d c b
名称1 1 -1 -1 -1
名称2 -1 2 -3 1
名称3 1 2 -1 0
名字4 9 0 1 -10

以及包含DF1列名的第二个data.frame . 换句话说,它看起来像:

DF2 a d c b

我想按顺序(按递减顺序)命令DF1:首先DF2 == a,然后根据DF2 == c,然后根据DF2 == d等等 . 在实际情况中,DF2由大约1000个元素以及DF1的列组成,DF2的每个元素将与DF1列匹配 . 所需的输出将是:

排序后DF2 [1,]

[[1]] a d c b
名称1 9 0 -1 -10
名称2 1 1 -3 1
名称3 1 2 -1 0
名称4 -1 2 -3 1

排序DF2后[2,]

[[2]] a d c b
名字1 -1 2 -3 1
名字2 1 2 -1 0
名称3 1 1 -1 -1
名字4 9 0 1 -10

等等..

有人可以帮我吗?

最好,

F

2 回答

  • 2

    问题澄清后编辑:

    DF1 <- read.table(text="a    d    c    b
    Name1     1    1   -1   -1      
    Name2    -1    2   -3    1     
    Name3     1    2   -1    0   
    Name4     9    0    1   -10 ", header=TRUE)
    
    DF2 <- data.frame(cols=c("a", "c", "d", "b"))
    
    
    lapply(as.list(DF2$cols), 
           function(x,df) df[order(df[,x], decreasing=TRUE),], 
           df=DF1)
    
    # [[1]]
    #        a d  c   b
    # Name4  9 0  1 -10
    # Name1  1 1 -1  -1
    # Name3  1 2 -1   0
    # Name2 -1 2 -3   1
    # 
    # [[2]]
    #        a d  c   b
    # Name4  9 0  1 -10
    # Name1  1 1 -1  -1
    # Name3  1 2 -1   0
    # Name2 -1 2 -3   1
    # 
    # [[3]]
    #        a d  c   b
    # Name2 -1 2 -3   1
    # Name3  1 2 -1   0
    # Name1  1 1 -1  -1
    # Name4  9 0  1 -10
    # 
    # [[4]]
    #        a d  c   b
    # Name2 -1 2 -3   1
    # Name3  1 2 -1   0
    # Name1  1 1 -1  -1
    # Name4  9 0  1 -10
    
  • 0

    我想你想看看:

    DF[Reduce(order,DF),]
           a d  c   b
    Name2 -1 2 -3   1
    Name1  1 1 -1  -1
    Name3  1 2 -1   0
    Name4  9 0  1 -10
    

相关问题