在数据框中查找连续值

Tar*_*rak 3 r

我有一个数据帧.我希望检测连续数字并将新列填充为1或0.

  ID Val
1  a   8
2  a   7
3  a   5
4  a   4
5  a   3
6  a   1
Run Code Online (Sandbox Code Playgroud)

预期产出

  ID Val  outP
1  a   8  0
2  a   7  1
3  a   5  0
4  a   4  1
5  a   3  1
6  a   1  0
Run Code Online (Sandbox Code Playgroud)

Jaa*_*aap 7

您可以将此diff功能与此功能结合使用,abs并查看结果是否为1其他值:

d$outP <- c(0, abs(diff(d$Val)) == 1)
Run Code Online (Sandbox Code Playgroud)

这使:

> d
  ID Val outP
1  a   8    0
2  a   7    1
3  a   5    0
4  a   4    1
5  a   3    1
6  a   1    0
Run Code Online (Sandbox Code Playgroud)

如果您只想考虑减少的连续值,可以使用:

c(0, diff(d$Val) == -1)
Run Code Online (Sandbox Code Playgroud)

如果要为每个执行此操作ID,也可以在基本R或使用dplyr执行此操作:

# base R
d$outP <- ave(d$Val, d$ID, FUN = function(x) c(0, abs(diff(x)) == 1))

# dplyr
library(dplyr)
d %>% 
  group_by(ID) %>% 
  mutate(outP = c(0, abs(diff(Val)) == 1))
Run Code Online (Sandbox Code Playgroud)