【发布时间】:2019-11-21 07:22:00
【问题描述】:
我有一个交替 TRUE 和 FALSE 值的向量:
dat <- c(T,F,F,T,F,F,F,T,F,T,F,F,F,F)
我想用唯一的序列号为TRUE 的每个实例编号,并为每个FALSE 值分配与其前面的TRUE 值关联的编号。
因此,我希望使用上面的示例 dat 输出(它有 4 个 TRUE 值):
1 1 1 2 2 2 2 3 3 4 4 4 4 4
我尝试了什么:
我尝试了以下方法(可行),但我知道必须有一个更简单的解决方案!
whichT <- which(dat==T)
whichF <- which(dat==F)
l1 <- lapply(1:length(whichT),
FUN = function(x)
which(whichF > whichT[x] & whichF < whichT[(x+1)])
)
l1[[length(l1)]] <- which(whichF > whichT[length(whichT)])
replaceFs <- unlist(
lapply(1:length(whichT),
function(x) l1[[x]] <- rep(x,length(l1[[x]]))
)
)
replaceTs <- 1:length(whichT)
dat2 <- dat
dat2[whichT] <- replaceTs
dat2[whichF] <- replaceFs
dat2
[1] 1 1 1 2 2 2 2 3 3 4 4 4 4 4
我需要一个更简单、更快捷的解决方案,因为我的真实数据集有 181k 行!
首选 Base R 解决方案,但任何解决方案都有效
【问题讨论】: