我想在比较变量的当前值和先前的值之后创建一个指标变量。逻辑是这样的: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
答案 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}}