Замена значений NA для переменной в кадре данных значениями не-NA из предыдущих строк при условии значений другой переменной - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть следующий фрейм данных:

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 записываются только для более ранних кодов активности.Таким образом, для каждой лунки, если последний код активности имеет NA для Month, я хочу заменить NA на Month из самого последнего кода активности, который имеет один записанный.В идеале мой результат должен выглядеть следующим образом:

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, если это поможет.Реальные данные имеют около 8000 строк, хотя, возможно, для 2800 скважин.

1 Ответ

0 голосов
/ 29 декабря 2018

Вот подход с использованием пакетов 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...