我有一个数据框,如:
id status age
1 1 NA
1 1 20
1 1 22
2 0 30
2 0 32
2 0 34
3 1 NA
3 1 NA
3 1 20
我想索引status=1
的元素和第一个非缺失值,如下所示:
id status age ind
1 1 NA F
1 1 20 T
1 1 22 F
2 0 30 F
2 0 32 F
2 0 34 F
3 1 NA F
3 1 NA F
3 1 20 T
感谢您的帮助!
答案 0 :(得分:1)
dat <- transform(dat, ind = status == 1 & ave(!is.na(age),
id, FUN = cumsum) == 1)
其中dat
是数据框的名称。
id status age ind
1 1 1 NA FALSE
2 1 1 20 TRUE
3 1 1 22 FALSE
4 2 0 30 FALSE
5 2 0 32 FALSE
6 2 0 34 FALSE
答案 1 :(得分:0)
rle
救援。
#example
Rgames> age<-c(NA,NA,1,2,3)
Rgames> rle(!is.na(age))
Run Length Encoding
lengths: int [1:2] 2 3
values : logi [1:2] FALSE TRUE
#now your dataframe
dat$ind<-rep(FALSE,nrow(dat))
datrle<- rle(!is.na(dat$age))
dat$ind[which(datrle$values)[1]] <- TRUE