代码之家  ›  专栏  ›  技术社区  ›  Jack Armstrong

按r将数据帧从列中的值从大到小排序

  •  1
  • Jack Armstrong  · 技术社区  · 6 年前

    很简单的概念。我有一个dataframe,df,想把它从一个列的最大值排序到最小值,然后得到一个新表中的前两列。但我似乎遇到了一个小问题。

    df<-df[-order(df$col2),]
    

    但我得到的错误是'closure'类型的对象不可子集。

    理论上,一旦我对数据进行排序,我将使用cbind来提取我需要的两列并放入一个新的数据帧中。我能做的那么多。

    样品:

    v2<-c(1,2,3,4,5,6)
    v1<-c('A','B','C','D','E','F')
    v3<-c(11,12,12.5,11.5,11.75,13)
    df<-cbind(v1,v2,v3)
    colnames(df)<-c("Number","Letter","Age")
    

    输出:

    df
      6  F
      5  E
      4  D
      3  C
      2  B
      1  A
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   RavinderSingh13 Nikita Bakshi    6 年前

    你能试着跟我说一下吗,如果这对你有帮助的话。

    library(dplyr)
    df[with(df, order(-Letter)), ] %>% select (Number)
    

    输出如下。

    6      F
    5      E
    4      D
    3      C
    2      B
    1      A
    > 
    

    数据创建人如下:

    df <- data.frame(
      v1 = c('A','B','C','D','E','F'),
      v2 = c(1,2,3,4,5,6),
      v3 = c(11,12,12.5,11.5,11.75,13)
    )
    colnames(df)<-c("Number","Letter","Age")
    
        2
  •  2
  •   melatonin    6 年前

    可以使用dplyr中的arrange函数对列进行排序(如果愿意,可以使用multiple)。

    library(dplyr)
    
    df <- data.frame(
           "Letter" = c('A','B','C','D','E','F'),
           "Number" = c(1,2,3,4,5,6),
           "Age" = c(11,12,12.5,11.5,11.75,13)
    )
    
    
    new_df <- df %>% 
     # desc orders from largest to smallest
     arrange(desc(Number)) %>%
     # select subsets the columns you want
     select(Letter, Number)
    
    new_df
    
    Letter Number   
    1      F      6 
    2      E      5 
    3      D      4 
    4      C      3 
    5      B      2 
    6      A      1