【问题标题】:Order according to a list of colnames根据列名列表排序
【发布时间】:2013-07-26 09:40:45
【问题描述】:

我有一个如下所示的第一个 data.frame:

DF1

          a    d    c    b
Name1     1    1   -1   -1      
Name2    -1    2   -3    1     
Name3     1    2   -1    0   
Name4     9    0    1   -10    

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

DF2
一个
d
c
b

我想按照以下顺序(按降序排列)DF1:首先是 DF2== a,然后是 DF2 ==c,然后是 DF2 ==d,依此类推。 在实际情况下,DF2 由大约 1000 个元素以及 DF1 的列组成,DF2 的每个元素都将与之匹配。 所需的输出将是:

DF2[1,]排序后

[[1]]

          a    d    c    b
Name1     9    0   -1   -10      
Name2     1    1   -3    1     
Name3     1    2   -1    0   
Name4    -1    2   -3    1    

DF2[2,]排序后

[[2]]

          a    d    c    b
Name1    -1    2   -3    1     
Name2     1    2   -1    0     
Name3     1    1   -1   -1   
Name4     9    0    1  -10  

等等。

【问题讨论】:

  • 请阅读一些关于 R 的介绍。这是非常基础的东西。
  • 能否请您详细说明您的问题。您要对列进行排序还是按列排序?预期的结果是什么?
  • @Fuv8 请显示代表性输入和预期输出。
  • 您希望如何处理平局?
  • 没有偏好 BenBarnes。如果我正确理解您的问题,只需每次生成根据 DF2 的每个元素排序的 data.frames 列表。

标签: r sorting dataframe


【解决方案1】:

问题澄清后编辑:

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

【讨论】:

  • 嗨罗兰!非常感谢您的帮助。问题是 DF2 包含大约 1000 个名称以及 DF1 的名称。
【解决方案2】:

我想你在找这个:

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

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2021-09-30
    • 1970-01-01
    • 2021-05-19
    • 2013-10-31
    • 1970-01-01
    • 2019-03-07
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多