我試圖根據類別列(0/1)創建一個新的ID(下面的數據中的id_2)。如果類別爲0,我只需要一個NA,如果這是1,那麼我需要對第一組「1」重複1,然後對第二組「1」重複2,依此類推。我需要爲每個id_1單獨執行此操作。For循環創建一個重複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