我在两列中有一系列数字,标题为"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。
非常感谢任何帮助。
答案 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
})