R - 根据相邻行的内容更改行值

时间:2013-01-10 10:09:33

标签: r neighbours

我在两列中有一系列数字,标题为"a""b"

如果“R”列中的值与其相邻单元格之间的差值大于10,我希望"b"更改列a"中的值。

例如:

a   |   b
-----------    
1   |   1
2   |   1
3   |   1
4   |   1
21  |   1
22  |   1
23  |   1
24  |   1
... |   ...

然后我希望R将列“b”中的值更改为

a   |   b
-----------    
1   |   1
2   |   1
3   |   1
4   |   0
21  |   0
22  |   1
23  |   1
24  |   1
... |   ...

因为a列中的值4和21彼此大于10。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

df <- data.frame(a = c(1:4, 21:24), b = 1)

# check whether differences are greater than 10 
diffs <- diff(df$a) > 10

# create `b`
df$b <- as.integer(!(c(FALSE, diffs) | c(diffs, FALSE)))

结果:

   a b
1  1 1
2  2 1
3  3 1
4  4 0
5 21 0
6 22 1
7 23 1
8 24 1

答案 1 :(得分:0)

一些替代方案。

df <- data.frame(a = c(1:4, 21:24), b = 1L)
local({
 w10 <- with(df, which(diff(a) > 10)))
 df$b[c(w10, w10+1)] <<- 0L
})