从组

时间:2018-06-21 05:24:05

标签: r

我想在每个组中获得第一行。

例如:-我有一个数据框

df =>
id  col_1   col_2   col_3
1   var_1   11      ba
2   var_1   12      ba
3   var_1   13      sw
4   var_1   13      sw
5   var_1   14      ba
6   var_1   11      ba
7   var_1   2       ba
8   var_1   45      ba
9   var_2   11      ba
10  var_2   12      ba
11  var_2   13      sw
12  var_2   13      sw
13  var_2   14      ba
14  var_2   11      ba
15  var_2   2       ba
16  var_2   45      ba
17  var_3   11      ba

output would be =>
id  col_1   col_2   col_3
1   var_1   11      ba
3   var_1   13      sw
5   var_1   14      ba
9   var_2   11      ba
11  var_2   13      sw
13  var_2   14      ba
17  var_3   11      ba

如果我使用重复功能,那么它仅由col_1给出第一行。

1 个答案:

答案 0 :(得分:1)

library(dplyr)

df %>%  
  group_by(col_1, col_2, col_3) %>% 
  slice(1) %>% 
  ungroup() %>% 
  arrange(id) %>% 
  filter(id == 1 | !(col_1 == lag(col_1, 1) & col_3 == lag(col_3, 1)))

     id col_1 col_2 col_3
  <int> <chr> <int> <chr>
1     1 var_1    11 ba   
2     3 var_1    13 sw   
3     5 var_1    14 ba   
4     9 var_2    11 ba   
5    11 var_2    13 sw   
6    13 var_2    14 ba   
7    17 var_3    11 ba