假设我们有以下数据集,其中的值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
V2
缺少值12的行,它应该在数据集中。我也尝试过,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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句