#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. спасибо, это спасло мой анализ данных 🙂