我正在尝试设计一种方法来重新编码向量中的项目,具体取决于它们是否在该向量中的某个值之后发生。我有一个完整的数据集(按主题分组的时间序列),其中包含一个列,表示受试者的初始暴露月份(此栏目的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(因为我需要重新编码在大型数据集上按因子分组的许多向量)。
非常感谢大家! 克里斯
答案 0 :(得分:2)
这也有效:
x2 <- c(NA,"G", NA, NA, NA, NA)
ifelse(seq_along(x2)>=match('G',x2),'G',x2)
之前已经问过这个问题......我想,我正试图挖掘旧问题。
答案 1 :(得分:0)
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