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 日の終わりに、ソリューション ベクトルは次の条件を満たす必要があります。1) 元のベクトルと同じ長さ (この場合は x2) であり、かつ 2) 最初の「G」の後にすべての位置に値「G」が含まれている必要があります。元のベクトルで

もう 1 つ、グループ化係数を介して 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 に答える