【发布时间】:2018-08-17 11:23:10
【问题描述】:
示例数据:
tibbly = tibble(age = c(10,30,50,10,30,50,10,30,50,10,30,50),
grouping1 = c("A","A","A","A","A","A","B","B","B","B","B","B"),
grouping2 = c("X", "X", "X","Y","Y","Y","X","X","X","Y","Y","Y"),
value = c(1,2,3,4,4,6,2,5,3,6,3,2))
> tibbly
# A tibble: 12 x 4
age grouping1 grouping2 value
<dbl> <chr> <chr> <dbl>
1 10 A X 1
2 30 A X 2
3 50 A X 3
4 10 A Y 4
5 30 A Y 4
6 50 A Y 6
7 10 B X 2
8 30 B X 5
9 50 B X 3
10 10 B Y 6
11 30 B Y 3
12 50 B Y 2
问题: 如何获取数据框中每个组的行顺序?我可以使用 dplyr 以适当的形式排列数据,以可视化我感兴趣的内容:
> tibbly %>%
group_by(grouping1, grouping2) %>%
arrange(grouping1, grouping2, desc(value))
# A tibble: 12 x 4
# Groups: grouping1, grouping2 [4]
age grouping1 grouping2 value
<dbl> <chr> <chr> <dbl>
1 50 A X 3
2 30 A X 2
3 10 A X 1
4 50 A Y 6
5 10 A Y 4
6 30 A Y 4
7 30 B X 5
8 50 B X 3
9 10 B X 2
10 10 B Y 6
11 30 B Y 3
12 50 B Y 2
最后,我对基于值列的每个组的年龄列的顺序感兴趣。 dplyr 有没有一种优雅的方法来做到这一点? summarise() 之类的东西基于行的顺序而不是实际值
【问题讨论】:
-
您在寻找
row_number吗?如tibbly %>% group_by(grouping1, grouping2) %>% arrange(grouping1, grouping2, desc(value)) %>% mutate(RowNum=row_number()) -
....或类似的东西?
tibbly %>% group_by(grouping1, grouping2) %>% arrange(grouping1, grouping2, desc(value)) %>% summarise(order = paste0(age, collapse = ",")) %>% ungroup() -
@AntoniosK 这正是我想要的!每个组中年龄列的顺序。在那种情况下,我不知道 paste with collapse 的用法。很整齐。谢谢!
-
@AntoniosK 请发表您的评论作为答案,这样问题就不会再显示为未回答。
-
@Mojoesque 请注意,
arrange(grouping1, grouping2, desc(value))可用于可视化目的,但分组后的arrange(desc(value))足以完成您想要的工作。