Есть ли функция R, чтобы найти значение, которое не является NA, и заполнить столбец этим значением, пока nex не станет значением NA?

#r

#r

Вопрос:

Эй, ребята, я пытаюсь запустить свой код, в котором я читаю в нескольких файлах Excel, со всеми листами в dataframe.

 library(tidyverse)
library(fs)
library(readxl)
library(xlsx)
library(easyGgplot2)
setwd(choose.dir())

read_multiple_excel <- function(path) {
  path %>%
    excel_sheets() %>% 
    set_names() %>% 
    map_df(read_excel, path = path)
}


data_df <- dir_ls(regexp = "xls") %>% 
  map_df(read_multiple_excel,
         .id = "data_name")

str(data_df) 
 

Код работает до сих пор, но в этом фрейме данных у меня есть столбец с заголовком … 18. Он содержит значения NA, а вторая запись в этом столбце представляет собой текст типа «3a». Я хочу переименовать все значения NA в 3a, пока не дойду до следующего ввода текста, например, 3b. К сожалению, также первый NA перед 3a должен быть назван 3a, а первый NA перед 3b также должен быть 3b. Это следует делать до тех пор, пока колонка не будет закончена.

Пример:

 ...18   ---->   ...18
NA               "3a" 
"3a"             "3a"
NA               "3a"
NA               "3b"
"3b"             "3b"
NA               "3b"
NA               "3c"
"3c"             "3c"
 

Я благодарен за каждый намек, как выполнить эту задачу.

Ответ №1:

Я бы использовал for цикл в сочетании с dplyr::coalesce :

 x <- c(NA, "3a", NA, NA, "3b", NA, NA, "3c")
x2 <- x

for (i in which(is.na(x))){
  if(i == 1){
   x2[i] <- x2[i   1] 
  }else{
    x2[i] <- dplyr::coalesce(x2[i   1], x2[i-1])
  }
}

x2
# [1] "3a" "3a" "3a" "3b" "3b" "3b" "3c" "3c"
 

В dplyr called есть функция fill , которая приближается к тому, что вы хотите, но не идеальна.

Комментарии:

1. спасибо, это спасло мой анализ данных 🙂