如何从分组数据帧中的每个组中获取第n个元素

Gen*_*nom 3 grouping r filter dataframe dplyr

我有一个大数据框,其中有一列,具有一个组名,该组名与dplyr分组。因此,多行具有相同的组名。为了减少数据,我想从每个组的第一个元素中提取第n个元素。有没有循环的R方式吗?

用序列对每行进行子集化,存在经常丢失每个组的第一行的问题。例如

data[seq(1, nrow(data), 10), ] # Some groups start without the first row.
Run Code Online (Sandbox Code Playgroud)

输入:

   Val Group
1  1.0 Fruit
2  2.0 Fruit
3  3.0 Fruit
4  1.5 Veg
5  2.8 Veg
6  4.2 Veg
7  5.1 Veg
Run Code Online (Sandbox Code Playgroud)

输出(第二个元素,请注意第三行!):

   Val Group
1  1.0 Fruit
2  3.0 Fruit
**3  1.5 Veg**
4  4.2 Veg
Run Code Online (Sandbox Code Playgroud)

sum*_*ftw 8

library(dplyr)
data %>% group_by(Group) %>%
  slice(seq(1, n(), by = 2))
Run Code Online (Sandbox Code Playgroud)

这给出:

# A tibble: 4 x 2
# Groups:   Group [2]
    Val Group
  <dbl> <fct>
1   1   Fruit
2   3   Fruit
3   1.5 Veg  
4   4.2 Veg 
Run Code Online (Sandbox Code Playgroud)

  • 或者使用计数器 - `dat %&gt;% group_by(Group) %&gt;% filter(row_number() %% 2 == 1)` ,这在大数据上应该更快一些。 (2认同)