在按其他列分组之前先按列排列
Arrange by Column Before Grouping by Other Columns
我正在尝试按一列排列数据框,然后按另外两列将其分组。
示例代码和我的尝试如下:
df <- data.frame(person = c("p1", "p2", "p4", "p3","p2", "p3", "p1", "p4"),
data1 = c("a","a","b","b","b","a","b","a"),
data2 = c(8,7,6,5,4,3,2,1))
df1 <- df %>%
group_by(person, data1) %>%
arrange(desc(data2), person, data1)
person data1 data2
<chr> <chr> <dbl>
1 p1 a 8
2 p2 a 7
3 p4 b 6
4 p3 b 5
5 p2 b 4
6 p3 a 3
7 p1 b 2
8 p4 a 1
它应该从 data2
下降(从最高到最低),但按 person
和 data
分组,以便相应的 person
行位于更高的行。
期望的结果如下所示:
person data1 data2
1 p1 a 8
2 p1 b 2
3 p2 a 7
4 p2 b 4
5 p4 b 6
6 p4 a 1
7 p3 b 5
8 p3 a 3
你可以按人取max data2,然后按max排列
df %>%
group_by(person) %>%
mutate(m=max(data2)) %>%
arrange(desc(m), person, desc(data2)) %>%
select(-m)
输出:
person data1 data2
1 p1 a 8
2 p1 b 2
3 p2 a 7
4 p2 b 4
5 p4 b 6
6 p4 a 1
7 p3 b 5
8 p3 a 3
相当于:
df%>%
inner_join(
df %>% group_by(person) %>%
summarize(m=max(data2)),
by="person"
) %>%
arrange(desc(m), person, desc(data2)) %>%
select(-m)
我正在尝试按一列排列数据框,然后按另外两列将其分组。
示例代码和我的尝试如下:
df <- data.frame(person = c("p1", "p2", "p4", "p3","p2", "p3", "p1", "p4"),
data1 = c("a","a","b","b","b","a","b","a"),
data2 = c(8,7,6,5,4,3,2,1))
df1 <- df %>%
group_by(person, data1) %>%
arrange(desc(data2), person, data1)
person data1 data2
<chr> <chr> <dbl>
1 p1 a 8
2 p2 a 7
3 p4 b 6
4 p3 b 5
5 p2 b 4
6 p3 a 3
7 p1 b 2
8 p4 a 1
它应该从 data2
下降(从最高到最低),但按 person
和 data
分组,以便相应的 person
行位于更高的行。
期望的结果如下所示:
person data1 data2
1 p1 a 8
2 p1 b 2
3 p2 a 7
4 p2 b 4
5 p4 b 6
6 p4 a 1
7 p3 b 5
8 p3 a 3
你可以按人取max data2,然后按max排列
df %>%
group_by(person) %>%
mutate(m=max(data2)) %>%
arrange(desc(m), person, desc(data2)) %>%
select(-m)
输出:
person data1 data2
1 p1 a 8
2 p1 b 2
3 p2 a 7
4 p2 b 4
5 p4 b 6
6 p4 a 1
7 p3 b 5
8 p3 a 3
相当于:
df%>%
inner_join(
df %>% group_by(person) %>%
summarize(m=max(data2)),
by="person"
) %>%
arrange(desc(m), person, desc(data2)) %>%
select(-m)