У меня есть список фреймов данных, импортированных из папки, и я хочу написать функцию, которая будет изменять некоторые значения в зависимости от заголовка фрейма данных (который берется из имени файла).
library(dplyr)
time_geog <- function(index) {
index = index %>%
mutate(Quarter = quarter(as.Date(quarter_date, format = "%d/%m/%Y"),
with_year = TRUE),
Quarter = paste0(substr(as.character(Quarter), 1, 4),"Q",
substr(as.character(Quarter), 6, 6)),
QuarterQF = case_when(Quarter == "2018Q4" ~ "p",
TRUE ~ ""))
if(str_detect(index, "Title")) {
index = index %>%
mutate(var1 = case_when(var1 == "abcd" ~ "code",
TRUE ~ var1),
var2 = case_when(var2 == "abcd" ~ "code",
TRUE ~ var2),
QF1 = case_when(var1 %in% c("value1", "value2") ~ "x",
TRUE ~ ""),
QF2 = case_when(var2 %in% c("value1", "value2") ~ "x",
TRUE ~ ""))
} else {
index = index %>%
mutate(var3 = case_when(var3 == "abcd" ~ "code",
TRUE ~ var3),
var4 = case_when(var4 == "abcd" ~ "code",
TRUE ~ var4),
QF1 = case_when(var3 == "value1" ~ "d", TRUE ~ "",
var3 %in% c("value2", "value3") ~ "x",
TRUE ~ ""))
}
}
Я поместил эту функцию в цикл for, как показано ниже, который также считывает все нужные мне файлы и присваивает им имя на основе их исходного имени.
for (i in names) {
filepath <- file.path(files, paste0(i, ".csv"))
assign(substr(i, 10, nchar(i)), read_csv(filepath))
time_geog(get(substr(i, 10, nchar(i))))
}
Это работает, когда я передаю ему определенный файл, но не когда я запускаю цикл.У меня также нет проблем с чтением нужных мне файлов с нужными заголовками.Я не хочу, чтобы все они потом находились в одном и том же фрейме данных, что происходит, если я использую:
for (i in names) {
filepath <- file.path(files, paste0(i, ".csv"))
assign(substr(i, 10, nchar(i)), read_csv(filepath))
i <- time_geog(get(substr(i, 10, nchar(i))))
}
Любая помощь будет принята с благодарностью.Я чувствую, что я действительно близко, но мне просто не хватает жизненно важных знаний!