0

我正在尝试设计一种方法来根据它们是否在该向量中的某个值之后出现来重新编码向量中的项目。我有一个完整的数据集(按主题分组的时间序列),其中包含一个指示主题初始曝光月份的列(该列的 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(因为我需要在大型数据集上重新编码许多按因子分组的向量)。

提前非常感谢大家!克里斯

4

2 回答 2

2

这也有效:

x2 <- c(NA,"G", NA, NA, NA, NA)
ifelse(seq_along(x2)>=match('G',x2),'G',x2)

以前有人问过这个问题...我想,我正在尝试挖掘旧问题。

于 2012-08-02T00:15:41.127 回答
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
于 2012-08-02T00:09:09.343 回答