按两列排序数据框(带条件)

时间:2015-10-01 09:04:54

标签: r sorting dataframe conditional-statements

我在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

现在生病将按其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

希望您能按字母顺序排序数据框来帮助我。

2 个答案:

答案 0 :(得分:6)

根据@Stezzo的评论更新答案

只需在DataTable[, 1]功能

中添加order即可
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第二列进行排序,如果是平局,它会考虑第二个参数,即第一列。

答案 1 :(得分:3)

除了@Ronak Shah,您还可以使用arrange的{​​{1}}。 它看起来有点简单。

dplyr

给出

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排序,然后您可以添加更多变量。