Я пытаюсь прочитать несколько CSV с заголовками, которые начинаются в разных строках, а затем отображают их в один фрейм данных.Я попробовал приведенный здесь код, но не смог заставить функцию работать.
Считать CSV в R в зависимости от того, где начинается заголовок
Вот два примера DFs:
file1 <- structure(list(X..Text = c("# Text", "#", "agency_cd", "5s",
"USGS", "USGS"), X = c("", "", "site_no", "15s", "4294000", "4294000"
), X.1 = c("", "", "datetime", "20d", "6/24/13 0:00", "6/24/13 0:15"
), X.2 = c("", "", "tz_cd", "6s", "EDT", "EDT"), X.3 = c("",
"", "Gage height", "14n", "1.63", "1.59"), X.4 = c("", "", " Discharge",
"14n", "1310", "1250")), class = "data.frame", row.names = c(NA,
-6L))
file2 <- structure(list(X..Text = c("# Text", "# Text", "#", "agency_cd",
"5s", "USGS", "USGS"), X = c("", "", "", "site_no", "15s", "4294002",
"4294002"), X.1 = c("", "", "", "datetime", "20d", "6/24/13 0:00",
"6/24/13 0:15"), X.2 = c("", "", "", "tz_cd", "6s", "EDT", "EDT"
), X.3 = c("", "", "", "Gage height", "14n", "1.63", "1.59"),
X.4 = c("", "", "", " Discharge", "14n", "1310", "1250")), class =
"data.frame", row.names = c(NA,
-7L))
Я хотел бы использовать аналогичное решение для вопроса, который я задавал выше, хотя мне также нужно пропустить строку после заголовка (строка заголовка = строка, которая начинается с "agency_cd"),и затем сделайте что-то похожее на это, чтобы связать все CSV в один фрейм данных с именами файлов в столбце:
# Path to the data
data_path <- "Data/folder1/folder2"
# Bind all files together to form one data frame
discharge <-
# Find all file names ending in CSV in all subfolders
dir(data_path, pattern = "*.csv", recursive = TRUE) %>%
# Create a dataframe holding the file names
data_frame(filename = .) %>%
# Read in all CSV files into a new data frame,
# Create a new column with the filenames
mutate(file_contents = map(filename, ~ read_csv(file.path(data_path, .), col_types = cols(.default = "c")))
) %>%
# Unpack the list-columns to make a useful data frame
unnest()
Если вы используете пример функции, предоставленной в соответствующем вопросе выше: A) Я могу 't получить строку header_begins, чтобы дать мне вектор, и B) я не знаю, как потом включить функцию в функцию read_csv, описанную выше.
Вначале я попробовал это, используя решение соответствующего вопроса:
# Function
detect_header_line <- function(file_names, column_name) {
header_begins <- NULL
for(i in 1:length(file_names)){
lines_read <- readLines(file_names[i], warn=F)
header_begins[i] <- grep(column_name, lines_read)
}
}
# Path to the data
data_path <- "Data/RACC_2012-2016/discharge"
# Get all CSV file names
file_names = dir(data_path, pattern = "*.csv", recursive = TRUE)
# Get beginning rows of each CSV file
header_begins <- detect_header_line(file.path(data_path, file_names), 'agency_cd')
Но вектор header_begins был пуст.И если я могу это исправить, мне все еще нужна помощь, чтобы включить это в мой код выше.
Любая помощь очень ценится!