r - 仅在组中它们之间的差异小于“n”的行
问题描述
假设我们有以下数据集,其中的值V2
按组升序排列V1
:
Input =(" V1 V2
1 A 3
2 A 4
3 A 5
4 A 6
5 A 12
6 A 13
7 B 4
8 B 5
9 B 6
10 B 12
11 C 13
12 C 14
13 C 18")
df = as.data.frame(read.table(textConnection(Input), header = T, row.names = 1))
现在我想保留连续行之间的差异为 的行<= 1
,所以我想要的输出:
V1 V2
1 A 3
2 A 4
3 A 5
4 A 6
5 A 12
6 A 13
7 B 4
8 B 5
9 B 6
11 C 13
12 C 14
但是,当我使用:
df %>%
group_by(V1) %>%
filter(c(0,diff(V2)) <= 1)
我有:
V1 V2
1 A 3
2 A 4
3 A 5
4 A 6
5 A 13
6 B 4
7 B 5
8 B 6
9 C 13
10 C 14
缺少值为 12的行,V2
它应该在数据集中。我也试过,lag()
但结果是一样的。
df %>%
group_by(V1) %>%
filter(V2 - lag(V2) <= 1 | is.na(V2 - lag(V2)))
你能指出我的错误吗?
解决方案
您需要从两侧减去值。尝试lead
并lag
:
library(dplyr)
df %>%
group_by(V1) %>%
filter(V2 - lag(V2) <= 1 | V2 - lead(V2) <= 1)
# V1 V2
# <chr> <int>
# 1 A 3
# 2 A 4
# 3 A 5
# 4 A 6
# 5 A 12
# 6 A 13
# 7 B 4
# 8 B 5
# 9 B 6
#10 C 13
#11 C 14
推荐阅读
- actionscript-3 - 没有动作时结束程序本身 Action Script 3
- asp.net-mvc - MVC Entity Framework:更新表中多条记录的字段
- excel - 循环功能+保存PDF报告
- javascript - 渐进式渲染平行坐标d3 V4中的多选?
- kubernetes - 指定 Kubernetes DaemonSet 的调度顺序
- ios - 如何检测使用 openUrl() 进行的呼叫在 ios 中结束
- asp.net - 从 asp.net 自动登录到 wordpress
- macos - SCNView 覆盖导致调整大小时撕裂
- c# - 如何在实体框架中基于 2 个外键制作复合键?
- python - 如何将哈希表中的线性探针转换为二次探针?