比较当前单元格和excel样式中的前一个单元格而不循环

时间:2016-10-13 15:05:22

标签: r

我想在比较变量的当前值和先前的值之后创建一个指标变量。逻辑是这样的:if current value= previous value, then indicator =1,else 0。第一个指标值被截断,因为没有比较。 它需要很快,因为我的数据中有很多组要比较(为简单起见,我没有包括该组)

> dt<-c('a','a','a','b','a','a','c','c') 
>  indicator
 [1] NA  1  1  0  0  1  0  1

3 个答案:

答案 0 :(得分:1)

您可以使用Lag

中的Hmisc

忽略第一个值[-1]并在开头添加NA

library(Hmisc)
c(NA, as.numeric(dt== Lag(dt))[-1])

#[1] NA  1  1  0  0  1  0  1

答案 1 :(得分:1)

使用基数R,您可以使用head()tail()删除向量的最后一个元素和第一个元素并进行比较,然后将NA添加到前面。

c(NA, as.numeric(head(dt, -1) == tail(dt, -1)))

如果dt是数字向量,您可以使用diff之类的

dn <- c(1,1,1,2,1,1,3,3)
c(NA, (diff(dn)==0)+0)

(使用+0而不是as.numeric来制作布尔1和0。)

答案 2 :(得分:1)

你也可以在基础R中使用rle

v <- rle(dt)[[1]]
x <- rep(1:length(v),v)
indicator <- c(NA, (diff(x)==0)*1)

#[1] NA  1  1  0  0  1  0  1
  • v:获取每个角色重复的次数
  • x:包含来自dt的相应数字向量,以便从[{1}}
  • 中受益