首页 > 解决方案 > 如何从特定点开始删除观察结果?

问题描述

我有一个按组进行多次观察的数据。我努力做的是从单个变量的特定值中删除所有观察值(每组内)。

例如,考虑下面的数据集:

id  Var1
A  0 
A  0
A  1
A  0
B  0
B  1
B  0 
B  1

我想在 Var1 中第一次出现 1 之后(包括)删除对 A 和 B 的所有观察;结果将是:

id  Var1
A   0 
A   0
B   0

非常欢迎任何建议!非常感谢!

标签: rsubsetdata-manipulation

解决方案


如果你愿意tidyverse,你可以这样做:

df %>%
 group_by(id) %>%
 filter(row_number() < min(which(Var1 == 1)))  

  id     Var1
  <fct> <int>
1 A         0
2 A         0
3 B         0

它正在评估每组“Var1”== 1 的最小行数,然后保留低于最小行数的行。

或者:

df %>%
 group_by(id) %>%
 filter(row_number() <= min(which(Var1 == 0 & lead(Var1) == 1)))

它正在评估“Var1”== 0 且下一个“Var1”值为 1 的最小行数,然后保留低于或等于最小行数的行。

或者cumsum()@markus 和@arg0naut 已经发布的一种方法data.table

df %>%
 group_by(id) %>%
 filter(cumsum(Var1) < 1)

推荐阅读