[英]Fill in NA values based on beginning/end value in data frame
我目前有一個帶有開始和結束值的數據框。 我需要它們在開始值和結束值之間“填充”。 需要注意的是:仍有許多值需要保持NA。
上下文:我正在跟蹤持續一定天數的事件。 例如(如下所示),一個事件可能會持續3天,或者可能會持續6天。另一方面,如果在幾天內沒有事件發生,我需要將該事件保留為NA。
以下是當前情況:
Date value event event_detail
2017-03-30 12 NA NA
2017-03-31 14 NA NA
2017-04-01 15 A Y
2017-04-02 20 NA NA
2017-04-03 17 A Y
2017-04-04 20 NA NA
2017-04-05 14 NA NA
這就是我想要的:
Date value event event_detail
2017-03-30 12 NA NA
2017-03-31 14 NA NA
2017-04-01 15 A Y
2017-04-02 20 A Y
2017-04-03 17 A Y
2017-04-04 20 NA NA
2017-04-05 14 NA NA
棘手的情況是,例如在4月3日之后,可能有一段時間沒有活動了,我不希望填寫事件“ A”或詳細信息“ Y”。
有任何想法嗎? 謝謝。
如果您只是想向后傳遞一個值,那么zoo::na.locf()
(上次觀察zoo::na.locf()
可以執行此操作(基本上它變為下一個后結觀察)。
library(zoo)
mydata <-
data.frame(stringsAsFactors=FALSE,
Date = c("1/04/2017", "2/04/2017", "3/04/2017", "4/04/2017",
"5/04/2017"),
value = c(15L, 20L, 17L, 20L, 14L),
event = c("A", NA, "A", NA, NA),
event_detail = c("Y", NA, "Y", NA, NA)
)
mydata$event <- na.locf(mydata$event, fromLast = TRUE, na.rm = FALSE)
mydata$event_detail <- na.locf(mydata$event_detail, fromLast = TRUE, na.rm = FALSE)
mydata
Date value event event_detail
1 1/04/2017 15 A Y
2 2/04/2017 20 A Y
3 3/04/2017 17 A Y
4 4/04/2017 20 <NA> <NA>
5 5/04/2017 14 <NA> <NA>
在執行此操作之前,請記住對數據進行排序!
編輯:剛剛看到您也有dplyr
標簽。 就是這樣:
mydata %<>%
mutate_at(vars(starts_with("event")), na.locf, fromLast = TRUE, na.rm = FALSE)
如果您知道間隔的大小將小於na.locf
觀察之間的時間間隔,則還可以限制na.locf
的范圍。
mydata <-
data.frame(stringsAsFactors=FALSE,
Date = c("30/03/2017", "31/03/2017", "1/04/2017", "2/04/2017",
"3/04/2017", "4/04/2017", "5/04/2017"),
value = c(12L, 14L, 15L, 20L, 17L, 20L, 14L),
event = c(NA, NA, "A", NA, "A", NA, NA),
event_detail = c(NA, NA, "Y", NA, "Y", NA, NA)
)
mydata %<>%
mutate_at(vars(starts_with("event")), na.locf, fromLast = TRUE,
na.rm = FALSE, maxgap = 1)
mydata
Date value event event_detail
1 30/03/2017 12 <NA> <NA>
2 31/03/2017 14 <NA> <NA>
3 1/04/2017 15 A Y
4 2/04/2017 20 A Y
5 3/04/2017 17 A Y
6 4/04/2017 20 <NA> <NA>
7 5/04/2017 14 <NA> <NA>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.