根据组对值排序

时间:2019-07-28 04:35:42

标签: r dataframe

我有3栏:家庭指数,每个家庭的成员人数和每个人的旅行次数。如何对这些列进行排序?

这是一个例子

  Household  person  trip
      1         1     1
      1         1     2
      1         1     3
      1         2     1
      1         2     3
      1         2     2
      2         1     2
      2         1     1
      2         2     1
      2         2     2

因此,我希望为每个人对第三列进行排序。如您所见,在第一家庭中,第二人称旅行需要分类,在第二家庭中,第一人称旅行需要

所以输出是

  Household  person  trip
      1         1     1
      1         1     2
      1         1     3
      1         2     1
      1         2     2
      1         2     3
      2         1     1
      2         1     2
      2         2     1
      2         2     2

1 个答案:

答案 0 :(得分:2)

一种选择是使用arrange_all,因为只有三列

library(dplyr)
df1 %>%
   arrange_all
#   Household person trip
#1          1      1    1
#2          1      1    2
#3          1      1    3
#4          1      2    1
#5          1      2    2
#6          1      2    3
#7          2      1    1
#8          2      1    2
#9          2      2    1
#10         2      2    2

如果有更多列,并且要基于前3列进行排序

df1 %>%
   arrange_at(1:3)

还可以指定用vars包裹的列名


或使用arrange

df1 %>%
   arrange(Household, person, trip)

或与base R

df1[do.call(order, df1[c("Household", "person", "trip")]),]

数据

df1 <- structure(list(Household = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L), person = c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L), 
    trip = c(1L, 2L, 3L, 1L, 3L, 2L, 2L, 1L, 1L, 2L)), 
    class = "data.frame", row.names = c(NA, 
-10L))