在R中,如果值与先前值或后续值不同,如何添加TRUE/FALSE列?

Ada*_*ith 3 r

样本数据:
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)

我有很多方法可以做到这一点,但我无法弄明白.任何帮助表示赞赏!

Mat*_*erg 5

您可以申请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非零值,这意味着前导元素或后续元素不同,因此我们将结果与前导相反!.