R-其中元素不等于向量中的下一个元素

时间:2019-09-09 23:40:07

标签: r

带有向量,说:

a <- c(1,1,1, 2,2,2,2, 1,1, 3,3,3,3)

我需要知道

  • 元素值在哪个索引值处更改
  • 更改前后的元素值

使用上面的示例,输出将类似于:

i before after
3 1      2
7 2      1
9 1      3

我想我可以将值转换为data.frame并滞后/移动列,但想知道是否有更好的方法。如果可能的话,我还试图避免遍历向量。

我也不需要data.frame /电子表格格式的结果;随时提出不同的输出格式。

2 个答案:

答案 0 :(得分:4)

这是一个选择

Combobox

您可以将所有内容汇总到一个函数中

idx <- which(a != c(a[-1], NA))
data.frame(
    i = idx,
    before = a[idx],
    after = a[idx + 1])
#  i before after
#1 3      1     2
#2 7      2     1
#3 9      1     3

提供与上述相同的输出。

答案 1 :(得分:3)

with(rle(a), data.frame(i = head(cumsum(lengths), -1),
                        before = head(values, -1),
                        after = values[-1]))
#  i before after
#1 3      1     2
#2 7      2     1
#3 9      1     3