2013-01-10 43 views
1

我在兩列中有一系列數字,標題分別爲"a""b"R - 根據相鄰行的內容更改行值

我想R改變"b"列中的值,如果在列中的值之間的差異「a"比10與其相鄰細胞更大

例如:

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 
... | ... 

因爲值4和21在a欄中彼此大於10。

任何幫助將不勝感激。

回答

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 
+0

太棒了,謝謝! – Ian1234567

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 
})