Переместите наблюдения за фиктивными датами на правильную дату в сгруппированных данных, используя R - PullRequest
0 голосов
/ 08 октября 2019

Некоторые наблюдения в моих данных записаны в неправильную дату, и я хотел бы исправить это.

Мои данные выглядят так:

id <- c(1,1,1,2,2,2,2,2,2,2,3,3,3,3)
value <- c(NA,50,NA, 100, NA, NA, 75, NA, 150, NA, NA,80,100,NA)
type <- c("f",NA, "e", "f","e","e", NA, "e", NA, "e", "f", NA, NA, "e")
date <- as.Date(c("2019-01-10","2019-01-15","2019-02-01","2020-01-10","2020-02-10","2020-03-10","2020-03-18","2020-04-15","2020-06-01","2020-06-07","2020-07-01","2020-07-10","2020-11-25","2020-12-01"))
extra <- c(NA,222,NA, 333, NA, NA, 444, NA, 555, NA, NA, 666, 777, NA )                 

df1 <- data.frame(id, value, type, date, extra)
df1

id value type  date        extra
1    NA    f   2019-01-10    NA
1    50 <NA>   2019-01-15   222
1    NA    e   2019-02-01    NA
2   100    f   2020-01-10   333
2    NA    e   2020-02-10    NA
2    NA    e   2020-03-10    NA
2    75 <NA>   2020-03-18   444
2    NA    e   2020-04-15    NA
2   150 <NA>   2020-06-01   555
2    NA    e   2020-06-07    NA
3    NA    f   2020-07-01    NA
3    80 <NA>   2020-07-10   666
3   100 <NA>   2020-11-25   777
3    NA    e   2020-12-01    NA

Я хотел бы сгруппировать свои данные на основе "id".

Затем, если «тип» равен «NA», я бы хотел переместить наблюдения в «значение» и «дополнительные» в строку, ближайшую по времени (основанную на «дате»), которая имеет действительную «группу»" стоимость.

Итак, я хотел бы, чтобы мои данные выглядели так:

id <- c(1,1,2,2,2,2,2,3,3)
value <- c(50,NA, 100, NA, 75, NA, 150,80,100)
type <- c("f" ,"e", "f","e","e", "e", "e","f","e")
date <- as.Date(c("2019-01-10","2019-02-01","2020-01-10","2020-02-10","2020-03-10","2020-04-15","2020-06-07", "2020-07-01","2020-12-01"))
extra <- c(222,NA, 333,NA, 444, NA, 555, 666, 777)  

df2 <- data.frame(id, value, type, date, extra)

df2

id value type  date       extra
1    50    f   2019-01-10   222
1    NA    e   2019-02-01    NA
2   100    f   2020-01-10   333
2    NA    e   2020-02-10    NA
2    75    e   2020-03-10   444
2    NA    e   2020-04-15    NA
2   150    e   2020-06-07   555
3    80    f   2020-07-01   666
3   100    e   2020-12-01   777
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...