2017-11-09 1 views
1

하루에 변수를 래깅하려고하지만 많은 사람들이 전날 관찰하지 않습니다. 따라서이 과정에서 추가 행을 추가해야합니다. Dplyr은 가까이에있게하지만 프로세스에 새로운 행을 추가하고 수천 건의 사례가있는 방법이 필요합니다. 어떤 생각이라도 대단히 감사 할 것입니다.요일별 변수가 지연되고 프로세스에서 새 행을 생성합니다.

dat2<- 
    dat1 %>% 
    group_by(ID) %>% 
    mutate(v.L = dplyr::lead(v, n = 1, default = NA)) 
dat2 
    ID day  v v.L 
1  1  0 2.2 3.4 
2  1  1 3.4 1.2 
3  1  2 1.2 0.8 
4  1  5 0.8 NA 
5  2  1 6.4 2.0 
6  2  3 2.0 NA 

그러나 나는 여기에 도착해야합니다 :

ID<-c(1,1,1,1,2,2) 
day<-c(0,1,2,5,1,3) 
v<-c(2.2,3.4,1.2,.8,6.4,2) 
dat1<-as.data.frame(cbind(ID,day,v)) 
dat1 

    ID day v 
1 1 0 2.2 
2 1 1 3.4 
3 1 2 1.2 
4 1 5 0.8 
5 2 1 6.4 
6 2 3 2.0 

dplyr를 사용하여 날 여기를 가져

ID2<-c(1,1,1,1,1,2,2,2) 
day2<-c(0,1,2,4,5,1,2,3) 
v2<-c(2.2,3.4,1.2,NA,.8,6.4,NA,2) 
v2.L<-c(3.4,1.2,NA,.8,NA,NA,2,NA) 
dat3<-as.data.frame(cbind(ID2,day2,v2,v2.L)) 
dat3 

    ID2 day2 v2 v2.L 
1 1 0 2.2 3.4 
2 1 1 3.4 1.2 
3 1 2 1.2 NA 
4 1 4 NA 0.8 
5 1 5 0.8 NA 
6 2 1 6.4 NA 
7 2 2 NA 2.0 
8 2 3 2.0 NA 

답변

2

을 당신은 일의 순서를 완료 tidyr 패키지에서 completefull_seq을 사용할 수 있습니다 .

library(dplyr) 
library(tidyr) 

dat2 = dat1 %>% 
     group_by(ID) %>% 
     complete(day = full_seq(day,1)) %>% 
     mutate(v.L = lead(v)) %>% 
     filter(!(is.na(v) & is.na(v.L))) 


    ID day  v v.L 
    <dbl> <dbl> <dbl> <dbl> 
    1  0 2.2 3.4 
    1  1 3.4 1.2 
    1  2 1.2 NA 
    1  4 NA 0.8 
    1  5 0.8 NA 
    2  1 6.4 NA 
    2  2 NA 2.0 
    2  3 2.0 NA 
: 당신은 모두 vv.LNA이 행 끝에서 제거해야 할 것
관련 문제