带有向量,说:
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
/电子表格格式的结果;随时提出不同的输出格式。
答案 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