Как я могу обернуть строки кода в функцию, которую я могу запустить с помощью одной команды в R? - PullRequest
0 голосов
/ 18 февраля 2020

Итак, я работаю в сценарии и выполняю несколько задач с одинаковыми наборами данных. Но поскольку каждая задача занимает несколько сотен строк кода, я в конечном итоге очищаю свою глобальную среду, чтобы перейти к следующей задаче. Затем мне нужно перезапустить строки кода в верхней части скрипта, чтобы снова импортировать мои данные и работать над моей следующей задачей. Я хочу просто ввести команду, которая автоматически повторно импортирует данные, как только я закончу с одной задачей и могу работать с другой.

Вот, по сути, то, что я запускаю каждый раз, когда мне нужно работать над следующей задачей , Я импортирую свои данные с помощью функции read.csv, а затем фильтрую по нужным мне строкам.

d2015 <- read_csv("Data 2015 CSV.csv")
d2016  <- read_csv("Data 2016 CSV.csv")
d2017 <- read_csv("Data 2017 CSV.csv")
d2018 <- read_csv("Data 2018 CSV.csv")

dta_15 <- d2015 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
dta_16 <- d2016 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
dta_17 <- d2017 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
dta_18 <- d2018 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))

Я пытался поместить все это в al oop, но это не сработало,

rundata <- {
d2015 <- read_csv("Data 2015 CSV.csv")
d2016  <- read_csv("Data 2016 CSV.csv")
d2017 <- read_csv("Data 2017 CSV.csv")
d2018 <- read_csv("Data 2018 CSV.csv")

dta_15 <- d2015 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
dta_16 <- d2016 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
dta_17 <- d2017 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
dta_18 <- d2018 %>% filter(`Number` %in% c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                                                   "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510"))
}

Как я могу создать одну команду, которая будет перезапускать все эти команды? Лучший.

1 Ответ

2 голосов
/ 18 февраля 2020

Мы можем сделать это в map

library(dplyr)
library(purrr)
library(readr)

Поскольку значения для фильтрации одинаковы во всех наборах данных, мы можем создать объект

nm1 <- c("TX-500", "TX-600", "TX-503", "TX-700", "TX-603", 
                           "AZ-502", "MI-501", "LA-503", "GA-500", "FL-510")

Получить files, которые следуют заданному шаблону c в его именах

files <- list.files(pattern = '^Data \\d{4} CSV\\.csv$")

L oop над файлами, прочитайте с read_csv из readr и filter элементы для создания list из подмножества data.frame / tibble. Лучше хранить его в list, а не в отдельных объектах в глобальном окружении

lst1 <- map(files, ~ read_csv(.x) %>%
                   filter(Number %in% nm1)
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...