カテゴリの列(0/1)に基づいて新しいID(以下のデータではid_2)を作成しようとしています。カテゴリが0の場合は、NAが必要です.1の場合は、最初の1のグループを1、2のグループを1のように繰り返す必要があります。 id_1ごとに個別に行う必要があります。繰り返しIDのブロックのシーケンスを作成するループ
以下は、私のデータの例、それを実行しようとした結果、および出力です。 私は関数にwhileループを含めることも試みましたが、これは役に立ちませんでした。
ご協力いただければ幸いです。
マイデータ
id_1 category id_2 1 NA NA 1 1 1 1 1 1 1 1 1 1 1 1 1 0 NA 1 1 2 1 1 2 1 1 2 1 0 NA 1 0 NA 1 1 3 1 1 3 1 1 3 1 0 NA 2 0 NA 2 1 1 2 1 1 2 0 NA 2 0 NA 2 0 NA 2 1 2 2 1 2 2 1 2 2 1 2 3 1 1 3 1 1 3 1 1 3 1 1 3 0 NA 3 1 2 3 1 2 3 0 NA 3 0 NA 3 1 3 3 1 3 4 0 NA 4 1 1 4 1 1 4 1 1 4 0 NA 5 1 1 5 1 1 5 1 1
私のコード
my_function <- function(df){ out <- vector() out_2 <- list() for(k in unique(df$id_1)){ dat <- df[df$id_1 == k,] i <- 0 #while(i <= dim(dat)[1]){ i <- i+1 for(j in 3: dim(dat)[1]-1){ out[j] <- (ifelse(dat[j-1, 2] == 1, ifelse(dat[j, 2] == 1, i, NA), # yes 1st ifelse() ifelse(dat[j, 2] == 1, i+1, NA))) # no 1st ifelse() out_2[[k]] <- out } #} } return(out_2) }
出力
#[[1]] #[1] NA NA 1 1 1 NA 2 1 1 NA NA 2 1 1 #[[2]] #[1] NA 2 1 NA NA NA 2 1 1 NA NA 2 1 1 #[[3]] #[1] NA 1 1 1 NA 2 1 NA NA 2 NA 2 1 1 #[[4]] #[1] NA 2 1 1 NA 2 1 NA NA 2 NA 2 1 1 #[[5]] # [1] NA 1 1 1 NA 2 1 NA NA 2 NA 2 1 1
「id_1」4と5の値は1である必要があります。 – akrun
はい、あなたは正しい@akrunです。今修正されました。ありがとう。 – Rafael