Такое чувство, что это должно быть простой проблемой, но по какой-то причине я ее не получаю.
У меня есть куча столов, за которыми я должен добраться из SQL и других мест, и код становится длинным Это громоздко, и я просто хотел бы сжать ее, сделав функции () для каждой таблицы, чтобы при вызове, скажем, load_table1, он выполнял код SQL в R, чтобы загрузить table1 со всеми необходимыми манипуляциями. Я пробовал поиск, но функции - такая распространенная тема, что я не могу найти правильный ответ.
Цель состоит в том, чтобы иметь функцию (), которая содержит код, который читает данные с использованием read_xlsx () или dbGetQuery (), манипулирует данными, а затем загружает эту таблицу в R.
Итак, в качестве примера, если у меня есть таблица, которая выглядит как данные ниже, где есть ошибки в столбце YearOfManuf, я необходимо очистить ошибки и заменить значения средним значением YearOfManuf для префикса SerialNumber по каждой марке
data.table(Make = c("Toyota", "Toyota", "Toyota", "Toyota", "Toyota", "Toyota",
"Mitsubishi", "Mitsubishi", "Mitsubishi", "Mitsubishi", "Mitsubishi", "Mitsubishi"),
SerialNumber = c("ABC1", "ABC2", "ABC3", "ABC4", "ABC5", "ABC6", "ABC123", "ABC456", "ABC789", "ZYX123", "ZYX456", "ZYX789"),
YearOfManuf = c(2017, "TEXT", 2010, 2019, 2070, 2019, 1999, 2000, 0, 1960, 2070, 2019))
. Поэтому я хотел бы прочитать приведенную выше таблицу и манипулировать ею в том же разделе кода, как показано ниже;
example_table <-
data.table(Make = c("Toyota", "Toyota", "Toyota", "Toyota", "Toyota", "Toyota",
"Mitsubishi", "Mitsubishi", "Mitsubishi", "Mitsubishi", "Mitsubishi", "Mitsubishi"),
SerialNumber = c("ABC1", "ABC2", "ABC3", "ABC4", "ABC5", "ABC6", "ABC123", "ABC456", "ABC789", "ZYX123", "ZYX456", "ZYX789"),
YearOfManuf = c(2017, "TEXT", 2010, 2019, 2070, 2019, 1999, 2000, 0, 1960, 2070, 2019)) %>%
mutate(OriginalYearCol = YearOfManuf,
SerialPrefix = substr(SerialNumber, 0, 3),
YearOfManuf = gsub("[^0-9.-]", "NA", YearOfManuf),
YearOfManuf = as.double(case_when(is.na(YearOfManuf)==T ~ "NA",
YearOfManuf > 2020 ~ "NA",
YearOfManuf < 1990 ~ "NA",
TRUE ~ YearOfManuf))) %>%
group_by(Make, SerialPrefix) %>%
mutate(AverageMakeModelYear = round(mean(YearOfManuf, na.rm = TRUE), 0),
YearOfManuf = case_when(is.na(YearOfManuf) == TRUE ~ AverageMakeModelYear,
TRUE ~ YearOfManuf))
Конечная цель состоит в том, чтобы записать вышеприведенное в функцию (), чтобы у меня был более аккуратный, более легкий ссылочный / найденный фрагмент кода для загрузки нужных мне таблиц.