1
我有一個包含案例觀察的數據集。實際上,每個案例都在10個不同的時間段(P1到P10)進行觀察,並且可以在每個時間段處於5個狀態(1到5)之一。根據列索引和其他值填充變量
每個案例在P1處於狀態1。一個案件只能從狀態1進展到2到3等,並且必須從1傳遞到2,然後傳遞給3等。在觀察期間,案件不一定會改變狀態。
在我的數據集中,我有每個案例在P1和P10的狀態,並且還知道每個狀態達到每個狀態的時間(S2到S5,例如S2的值爲5意味着狀態2中的第一個觀察結果在P5中)。
我的數據是這樣如下:
# Create test dataset #
test <- as.data.frame(c(1:8))
names(test) <- "Obs"
test$P1 <- 1
for (i in 2:9){
test[[paste("P",i,sep="")]] <- NA
}
test$P10 <- c(1,5,3,2,2,5,5,4)
test$S2 <- c(NA,2,4,9,7,3,3,2)
test$S3 <- c(NA,5,8,NA,NA,4,4,3)
test$S4 <- c(NA,7,NA,NA,NA,5,8,5)
test$S5 <- c(NA,9,NA,NA,NA,10,9,NA)
我想觀察P2的序列重建至P9的每一種情況下,填補空白,可以這麼說。我嘗試以下:
func <- function(base){
for(i in 1:nrow(base)){
if (is.na(base$S5[i])) {
for (j in 2:9){
base[[paste("P", j, sep="")]] <- NA
}
}
else {
for (j in 2:base$S5[i]){
base[[paste("P", j, sep="")]] <- 5
}
}
}
base
}
test <- func(test)
我想填充所有裨列,其中i = < S5與5.值然後做爲S4,S3和S2相同。所需的結果是:
Obs P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 S2 S3 S4 S5
1 1 1 1 1 1 1 1 1 1 1 1 NA NA NA NA
2 2 1 2 2 2 3 3 4 4 5 5 2 5 7 9
3 3 1 1 1 2 2 2 2 3 3 3 4 8 NA NA
4 4 1 1 1 1 1 1 1 1 2 2 9 NA NA NA
5 5 1 1 1 1 1 1 2 2 2 2 7 NA NA NA
6 6 1 1 2 3 4 4 4 4 4 5 3 4 5 10
7 7 1 1 1 2 3 3 3 4 5 5 4 5 8 9
8 8 1 2 3 3 4 4 4 4 4 5 2 3 5 NA
作爲另外,一旦最後的過渡已經發生了的情況下,我想所有下面的值是虛值9:
Obs P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 S2 S3 S4 S5
1 1 1 9 9 9 9 9 9 9 9 9 NA NA NA NA
2 2 1 2 2 2 3 3 4 4 5 9 2 5 7 9
3 3 1 1 1 2 2 2 2 3 9 9 4 8 NA NA
4 4 1 1 1 1 1 1 1 1 2 9 9 NA NA NA
5 5 1 1 1 1 1 1 2 9 9 9 7 NA NA NA
6 6 1 1 2 3 4 9 9 9 9 5 3 4 5 10
7 7 1 1 1 2 3 3 3 4 5 9 4 5 8 9
8 8 1 2 3 3 4 4 4 4 4 5 2 3 5 NA
對於這最後部分我可以使用:
for(i in 1:nrow(test)){
test$last_chg[i] <- ifelse(is.na(test$S2[i]),NA,max(test[i,c(12:15)], na.rm=T))
}
獲取最後一次狀態變化的列索引,但是如何填充9的右邊的所有列?