1

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

如果“列”中的值与其相邻单元格之间的差异大于 10,我想R更改列中的值。"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。

任何帮助将不胜感激。

4

2 回答 2

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
于 2013-01-10T11:00:52.600 回答
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
})
于 2013-01-10T14:20:15.247 回答