gpt4 book ai didi

r - 根据R代码中特定值的运行长度计算变量

转载 作者:行者123 更新时间:2023-12-01 10:42:22 27 4
gpt4 key购买 nike

我有这样一个数据集,

 dat <- data.frame(d1=c(0,1,0,1,0),
d2=c(0,1,1,1,0),d3=c(1,0,1,1,0),
d4=c(1,0,0,0,0),d5=c(1,1,1,0,0))
dat
d1 d2 d3 d4 d5
1 0 0 1 1 1
2 1 1 0 0 1
3 0 1 1 0 1
4 1 1 1 0 0
5 0 0 0 0 0

如果我认为每一行都是为个人运行的集合。我想根据运行计算一个名为“indicator”的指标变量。例如,个人 1 游程为 (0,0,1,1,1),因为此向后游程的长度为第一个 1 的值为 3。另一方面,对于个人 3 游程为 (0,1,1,0, 1), value first 1,s 为1的反向游程长度。需要的数据集是这样的。

  d1 d2 d3 d4 d5 indicator
0 0 1 1 1 3
1 1 0 0 1 1
0 1 1 0 1 1
1 1 1 0 0 3
0 0 0 0 0 0

我试过这种方式,

    indicator <- NULL      
for(i in 1:5){
indicator[i] <- rev(sequence(rle(dat[i,])$lengths))[1]
}
indicator[1:5]
cbind(dat, indicator=indicator[1:5])

但这给出了这样的数据,

  d1 d2 d3 d4 d5 indicator
1 0 0 1 1 1 3
2 1 1 0 0 1 1
3 0 1 1 0 1 1
4 1 1 1 0 0 2
5 0 0 0 0 0 5

谁能帮我解决这个问题?

最佳答案

尝试

val <- apply(dat, 1, function(x) with(rle(rev(x)==1), lengths[values])[1])
dat$indicator <- replace(val, is.na(val),0)
dat
# d1 d2 d3 d4 d5 indicator
#1 0 0 1 1 1 3
#2 1 1 0 0 1 1
#3 0 1 1 0 1 1
#4 1 1 1 0 0 3
#5 0 0 0 0 0 0

关于r - 根据R代码中特定值的运行长度计算变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29203590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com