非常简单的概念。我有一个数据框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
答案 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")