将R中的数据框从一列中的值最大到最小排序

时间:2018-07-10 00:29:20

标签: r sorting 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 个答案:

答案 0 :(得分:2)

您可以使用dplyr中的ranging函数对一列进行排序(如果需要,可以对多个列进行排序)。

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 

答案 1 :(得分:2)

能否请您尝试以下操作,如果有帮助,请告诉我。

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")