簡體   English   中英

基於i的值將每個i重新編碼為向量中的i + 1個索引項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM