r - 如何从特定点开始删除观察结果?
问题描述
我有一个按组进行多次观察的数据。我努力做的是从单个变量的特定值中删除所有观察值(每组内)。
例如,考虑下面的数据集:
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
非常欢迎任何建议!非常感谢!
解决方案
如果你愿意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)
推荐阅读
- python-3.x - 在 python 上运行 .sh 脚本
- php - 将前导 0 添加到 DateType
- java - 是否可以将音频效果附加到 Android Studio 中的音池?
- c++ - 一元减号的宏扩展
- css - Google 可视化和 CSS 网格高度
- reactjs - 下拉菜单未在页面加载时显示状态值
- python - 如何将此txt格式化为字典?
- unity3d - UI 的着色器图在场景选项卡中有效,但在游戏选项卡中无效
- google-data-studio - Google Data Studio:如何显示当前日期范围?
- c# - Kestrel 可以监听特定的外国地址吗?