在R中基于多个列对数据框进行排序

4
我执行了以下代码:

df<-data.frame(word=c("play","win","offer","http"),frequency=c(321,355,123,564),type=c("nonspam","nonspam","spam","spam"))

df=arrange(df,desc(frequency),desc(type))

df=df[order(df[,2],df[,3]),]

结果如下:

   word frequency type
4 offer       123    spam
3  play       321    nonspam
2   win       355    nonspam
1  http       564    spam

但我希望按照频率和类型对数据框进行排序,例如:

word frequency type
    1  http      564    spam
    4  offer     123    spam
    2  win       355    nonspam
    3  play      321    nonspam

1
只需反转顺序 - arrange(df, desc(type), desc(frequency)) - thelatemail
抱歉,我有两个字符串spam和nonspam。@thelatemail - van boeren
2
df[order(df$type, df$frequency, decreasing = TRUE),] - Ronak Shah
1个回答

8

按升序排序:

使用dplyr,像这样:

library(dplyr)
df <- df %>% arrange(type, frequency, word)

只需按您想要排序的顺序排列变量。

按降序排序:

只需在您希望按相反顺序排序的变量前加上负号即可。像这样。

df %>% arrange(-type, frequency, word)

处理文本...

如果您想尝试使用上述方法以相反顺序对文本进行排序,则可能会出现错误。要排列分类变量,请将变量放在desc()周围,如下所示:

df %>% arrange(desc(word))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接