如何在R中的纵向数据中指出每个主体的第一个非缺失值?

时间:2014-01-15 18:53:23

标签: r dataframe

我有一个数据框,如:

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

感谢您的帮助!

2 个答案:

答案 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