从列中的值开始,按R从大到小的顺序对数据帧进行排序



非常简单的概念。我有一个数据帧df,我想从一列中的最大值到最小值对它进行排序,然后在一个新表中获得前两列。但我似乎遇到了一个小问题。

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

但我得到的错误是"闭包"类型的对象是不可附属的。

理论上,一旦我对数据进行了排序,我就要使用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

您可以使用dplyr中的排列函数对列进行排序(如果您愿意,可以对多个列进行排序(。

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 

你能试试下面的内容吗?如果这对你有帮助,请告诉我。

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

最新更新