我有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
答案 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))