过滤tidyverse中每组的前5个观察值

过滤tidyverse中每组的前5个观察值,r,filter,dplyr,tidyverse,R,Filter,Dplyr,Tidyverse,我有几个不同测量位置的降水数据,希望使用tidyverse功能仅过滤每个位置和每组降水强度的前n个观测值 到目前为止,我已经根据地点和降水强度对数据进行了分组 这是一个最简单的例子(每个位置的每个降雨强度都有几个观测值) 非dplyr解决方案(也会重新排列行) 你可以做: df %>% group_by(location) %>% slice(1:5) location rain <dbl> <int> 1 1

我有几个不同测量位置的降水数据,希望使用
tidyverse
功能仅过滤每个位置和每组降水强度的前n个观测值

到目前为止,我已经根据地点和降水强度对数据进行了分组

这是一个最简单的例子(每个位置的每个降雨强度都有几个观测值)

非dplyr解决方案(也会重新排列行)

你可以做:

df %>%
 group_by(location) %>%
 slice(1:5)

   location  rain
      <dbl> <int>
 1        1     1
 2        1     2
 3        1     3
 4        1     4
 5        1     5
 6        2     1
 7        2     2
 8        2     3
 9        2     4
10        2     5
df%>%
分组依据(位置)%>%
切片(1:5)
位置雨
1        1     1
2        1     2
3        1     3
4        1     4
5        1     5
6        2     1
7        2     2
8        2     3
9        2     4
10        2     5

数据表中的选项

library(data.table)
setDT(df)[, .SD[seq_len(.N) <=5], location]
库(data.table)
setDT(df)[,.SD[seq_len(.N)数据无法复制(抛出错误)。可以说是
library(dplyr)
df %>% 
  group_by(location) %>%
  filter(row_number() %in% 1:5)
# Base R
df[unlist(lapply(split(row.names(df), df$location), "[", 1:5)), ]

# data.table
library(data.table)
setDT(df)[, .SD[1:5], by = location] 
df %>%
 group_by(location) %>%
 slice(1:5)

   location  rain
      <dbl> <int>
 1        1     1
 2        1     2
 3        1     3
 4        1     4
 5        1     5
 6        2     1
 7        2     2
 8        2     3
 9        2     4
10        2     5
library(data.table)
setDT(df)[, .SD[seq_len(.N) <=5], location]