样本数据:
df <- data.frame(time=c(1,2,3,4,5,6, 7), status=c("good", "good", "good", "bad", "good", "good", "good"))
输出:
time status
1 1 good
2 2 good
3 3 good
4 4 bad
5 5 good
6 6 good
7 7 good
Run Code Online (Sandbox Code Playgroud)
我想添加一个新的statuschangeIF 列status与上面或下面的行不同.输出看起来像这样:
time status statuschange
1 1 good NA
2 2 good TRUE
3 3 good FALSE
4 4 bad FALSE
5 5 good FALSE
6 6 good TRUE
7 7 good NA
Run Code Online (Sandbox Code Playgroud)
我有很多方法可以做到这一点,但我无法弄明白.任何帮助表示赞赏!
您可以申请diff查看两个条目是否相同.您需要其中两个差异,以查看元素周围的两个条目是否相同:
> !(c(NA, diff(as.numeric(x$status))) | c(rev(diff(as.numeric(rev(x$status)))), NA))
[1] NA TRUE FALSE FALSE FALSE TRUE NA
Run Code Online (Sandbox Code Playgroud)
第一个表达式告诉先前元素是否不同:
> c(NA, diff(as.numeric(x$status)))
[1] NA 0 0 -1 1 0 0
Run Code Online (Sandbox Code Playgroud)
第二个元素告诉以下元素是否不同:
> c(rev(diff(as.numeric(rev(x$status)))), NA)
[1] 0 0 1 -1 0 0 NA
Run Code Online (Sandbox Code Playgroud)
"或"操作|返回TRUE非零值,这意味着前导元素或后续元素不同,因此我们将结果与前导相反!.
| 归档时间: |
|
| 查看次数: |
1691 次 |
| 最近记录: |