首页 > 解决方案 > 子集分组数据

问题描述

我正在尝试对分组数据集进行子集化。尽管关于这个主题有很多问题(例如Select the first and last row by group in a data frame),但没有一个适合我这里描述的案例。一个示例数据是

df<-data.frame("id"=c(1,1,1,2,2,2,3,3,3),
           "x1"=c(NA,1,1,1,1,1,0,0,1),
           "x2"=c(10,8,13,4,7,6,9,10,6))

我想为每个 id 第一次看到“x1”等于 1 的情况保留数据。我希望有

df<-data.frame("id"=c(1,2,3),
           "x1"=c(1,1,1),
           "x2"=c(8,4,6))

我试过了

df<-df %>% 
group_by(id) %>% 
filter(first(x1)==1)

但它提供了不需要的输出。非常感谢您对此的任何帮助。

标签: rdataframedplyrsubset

解决方案


您可以先根据您的条件过滤数据框,然后使用该slice函数为每个组选择第一行。

df %>% 
  group_by(id) %>% 
  filter(x1 == 1) %>% 
  slice(1)

# A tibble: 3 x 3
# Groups:   id [3]
#      id    x1    x2
#   <dbl> <dbl> <dbl>
# 1     1     1     8
# 2     2     1     4
# 3     3     1     6

推荐阅读