按两列对数据框进行排序(有条件)[重复]

Posted

技术标签:

【中文标题】按两列对数据框进行排序(有条件)[重复]【英文标题】:Sort data frame by two columns (with condition) [duplicate] 【发布时间】:2015-12-29 06:27:42 【问题描述】:

我在 R 中有以下数据框:

DataTable <- data.frame( Name = c("Nelle","Alex","Thomas","Jeff","Rodger","Michi"), Age = c(17, 18, 18, 16, 16, 16), Grade = c(1,5,3,2,2,4) )

    Name Age Grade
1  Nelle  17     1
2   Alex  18     5
3 Thomas  18     3
4   Jeff  16     2
5 Rodger  16     2
6  Michi  16     4

现在 ill 将按其Age 列对该数据框进行排序。目前没问题:

DataTable_sort_age <- DataTable[with(DataTable, order(DataTable[,2])),]

    Name Age Grade
4   Jeff  16     2
5 Rodger  16     2
6  Michi  16     4
1  Nelle  17     1
2   Alex  18     5
3 Thomas  18     3

Name 列中年龄相同的人较多,应按字母顺序排序。如果超过一个人处于同一年龄的条件为真,则数据框应按字母顺序按Name 排序。输出应如下所示:

    Name Age Grade
1   Jeff  16     2
2  Michi  16     2
3 Rodger  16     4
4  Nelle  17     1
5   Alex  18     5
6 Thomas  18     3

希望您可以通过按字母顺序对数据框进行排序来帮助我。

【问题讨论】:

你查过相关问题吗?关于这个主题有很多线程 【参考方案1】:

根据@Stezzo 的评论更新答案

只需在order 函数中添加DataTable[, 1]

DataTable[order(DataTable[,2], DataTable[, 1]),]

#    Name Age Grade
# 4   Jeff  16     2
# 6  Michi  16     4
# 5 Rodger  16     2
# 1  Nelle  17     1
# 2   Alex  18     5
# 3 Thomas  18     3

请记住,传递参数的顺序很重要。它会首先对 DataTable 数据框 w.r.t 第 2 列进行排序,如果出现平局,它会考虑第二个参数,即第一列。

【讨论】:

这行得通:DataTable[order(DataTable[,"Age"], DataTable[,"Name"]), ]。在我看来,您不必使用with。如果由于某种原因您必须这样做,请解释原因。 P.S.:编码时少即是多。【参考方案2】:

除了@Ronak Shah 的回答,您还可以使用arrangedplyr。 对我来说它看起来有点简单。

arrange(DataTable,Age,Name)

给了

    Name Age Grade
1   Alex  16     3
2   Jeff  16     2
3  Michi  16     4
4 Rodger  16     2
5  Nelle  17     1
6   Alex  18     5
7 Thomas  18     4

在这里,它首先按Age 排序,然后是Name,您可以添加更多变量,依此类推。

【讨论】:

以上是关于按两列对数据框进行排序(有条件)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中按两列对DataTable进行排序

如何在R中一次按两列对行进行排名?

Pandas 数据框:按两列分组,然后对另一列进行平均

将熊猫数据框按两列分组而不汇总

根据两个不同表上的两列对完全连接进行排序

RDLC 在多列上排序