[英]Replacing NA values for a variable in a dataframe with non-NA values from prior rows conditional on values of another variable
我有以下數據框:
weird_data <-
data.frame("ID" = 1:8,
"API" = c("01-01",
"01-02",
"02-01",
"02-02",
"02-03",
"03-01",
"03-02",
"03-03"),
"Final" = c("no",
"yes",
"no",
"no",
"yes",
"no",
"no",
"yes"),
"Month" = c("May",
NA,
NA,
"June",
"July",
"April",
"June",
NA),
stringsAsFactors = FALSE
)
在API
列中,連字符前面的第一個數字是井代碼,連字符后面的第二個數字是活動代碼,其中較大的數字對應於以后的活動。 我只想保留與每個孔的最新活動代碼相對應的行。 但是,對於某些井而言,僅記錄較早的活動代碼的Month
數據。 因此,對於每口井,如果最后一個活動代碼具有“ Month
NA
,我想用已記錄Month
的最新活動代碼中的“ Month
替換該NA
。 理想情況下,我的輸出應如下所示:
desired_output <-
data.frame("ID" = 1:8,
"API" = c("01-01",
"01-02",
"02-01",
"02-02",
"02-03",
"03-01",
"03-02",
"03-03"),
"Final" = c("no",
"yes",
"no",
"no",
"yes",
"no",
"no",
"yes"),
"Month" = c("May",
"May",
NA,
"June",
"July",
"April",
"June",
"June"),
stringsAsFactors = FALSE
)
該井的順序,以及Final
列不可靠地指示我最終想盡可能保持井yes
,有沒有什么幫助。 但是,實際數據大約有8,000行,涉及2800口井。
這是使用tidyverse
軟件包的一種方法:
library(tidyverse)
output <- weird_data %>%
separate(API, into = c("well", "act"), sep = "-", remove = F) %>%
group_by(well) %>%
fill(Month) %>%
ungroup() %>%
select(-well, -act)
all.equal(output, desired_output)
#[1] TRUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.