簡體   English   中英

以另一個變量的值為條件,用先前行中的非NA值替換數據框中變量的NA值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM