【问题标题】:Sort a data frame in R largest to smallest from value in a column从列中的值从最大到最小对R中的数据框进行排序
【发布时间】:2018-07-10 00:29:19
【问题描述】:

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

【问题讨论】:

  • 能否在代码标签示例中添加示例输入示例和预期输出示例?
  • 已经完成了
  • 或者绑定列时使用df &lt;- cbind.data.frame(v1, v2, v2);您还交换了 NumberLetter 列。
  • -order(df$col2)order(-df$col2)?
  • df &lt;- data.frame(Letter = v1, Number = v2, Age = v3); 然后df[order(df$Number, decreasing = T), ]

标签: r sorting dataframe


【解决方案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")

【讨论】:

  • base R 选项将是 df[order(-df$Letter), "Number", drop = FALSE]
【解决方案2】:

您可以使用 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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多