Я написал простую функцию, которая берет файл Excel и выполняет некоторую очистку данных. Однако я должен повторить это для всех файлов, содержащихся в папке. Пока что функция работает с одним файлом, но когда я перебираю список, я получаю ошибки, перечисленные ниже, и выводятся только некоторые кадры данных (должно быть выведено 333 таблицы). Цель проекта - собрать все файлы Excel, очистить данные, объединить все DF и затем отправить их в базу данных.
library(readxl)
library(tidyr)
library(MESS)
library(stringr)
udFunction <- function(loc) {
test <- read_excel(loc) #read location
test <- test[-c(1:7),] #removes first 7 rows
names(test) <- test[1,] #makes the first row into column name
test <- test[-1,] #removes first row since it's copied to column name
#Rename all column names
names(test)[1] = "Time"
names(test)[2] = "Sample"
names(test)[3] = "Rename"
names(test)[4] = "Test"
names(test)[5] = "Test2"
names(test)[6] = "Test3"
names(test)[7] = "Test4"
names(test)[8] = "Test5"
names(test)[9] = "Test6"
names(test)[10] = "Test7"
names(test)[11] = "Test8"
names(test)[12] = "Test9"
names(test)[13] = "Test10"
names(test)[14] = "Test11"
names(test)[15] = "Test12"
names(test)[16] = "Test13"
names(test)[17] = "Test14"
names(test)[18] = "Test15"
names(test)[19] = "Test16"
#Copy Time column to NewColumn
test %<>%
mutate(NewColumn = Time) %>%
mutate(Date = str_extract(loc, "\\d{6}")) #loc is from the path name
test$NewColumn <- str_replace(test$NewColumn, "\\d", NA_character_) %>%
filldown() #replaces any string without digits with NA
test %<>%
filter(!str_detect(test$Time, "[A-Za-z]")) #filters anything with characters
}
loc <- "C:/PATH.../.../2019"
files = list.files(path = loc, pattern = ".xls$", full.names = TRUE) #files is a list of 333 path names.
for (i in files) {
cast = paste("CC", i, sep = "_")
try(assign(cast, udFunction(i)))
}
Я ожидаю, что кадры данных для всех файлов будут выводиться, однако я продолжаю получать одно и то же Error in attr(x, "names") <- as.character(value) :
'names' attribute [1] must be the same length as the vector [0]
.
Я предполагаю, что это как-то связано с переименованиемимена столбцов. Опять же, все это работает, когда я пробую это одно за другим, но когда я пытаюсь создать функцию, а затем перебрать список путей, я получаю ошибку выше.