[英]Recode every i to i+1 indexed item in a vector based on value of i
我正在嘗試設計一種方法來重新編碼向量中的項目,這是基於它們是否在該向量中的某個值之后發生。 我有一個完整的數據集(按主題分組的時間序列),其中包含一個列,表示受試者的初始暴露月份(此欄目的NA為缺乏暴露,“G”表示月份暴露發生)。 一旦受試者被“暴露”,我需要該受試者的載體以表明他/她已經暴露直到該受試者的觀察期結束。 這是一個精簡的示例和一個有效的解決方案,但並非在每種情況下我都需要它:
x2 <- c("G", NA, NA, NA, NA)
solution <- c(rep(1, length(x2)- length(rep("G", (length(x2)+1 )- which(x2=="G")))), rep("G", (length(x2)+1 )- which(x2=="G")))
在這種情況下,解決方案如下所示:
> solution
[1] "G" "G" "G" "G" "G"
也就是說,當面對不包含任何“G”的向量時,解決方案會中斷
x2 <- c(NA, NA, NA, NA, NA)
solution <- c(rep(1, length(x2)- length(rep("G", (length(x2)+1 )- which(x2=="G")))), rep("G", (length(x2)+1 )- which(x2=="G")))
Error in rep("G", (length(x2) + 1) - which(x2 == "G")) :
invalid 'times' argument
因此,在一天結束時,解向量需要:1)與原始向量長度相同(在這種情況下為x2)和2)在初始“G”之后的每個位置包含值“G”在原始向量中
還有一點,我需要解決方案以某種形式,我可以通過分組因子傳遞給plyr(因為我需要重新編碼在大數據集上按因子分組的許多向量)。
非常感謝大家! 克里斯
這也有效:
x2 <- c(NA,"G", NA, NA, NA, NA)
ifelse(seq_along(x2)>=match('G',x2),'G',x2)
之前已經問過這個問題......我想,我正在努力挖掘舊問題。
repG <- function(x, start) { patt <- paste0("^",start,"$")
if( length(grep(patt, x))>0 ){ x[ grep(patt, x)[1]:length(x)] <- start
return(x) } }
grep("^G$", tvec)
#[1] 6 7 8 9 10 11 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.