I have a dataframe (dat
) in my environment. I want to load a new dataframe from CSV, clean it up a little, and then append it to the end of my dat
object.
Pipe into bind_rows()
dat <- read_csv("https://raw.githubusercontent.com/ConorIA/tidy-intro/master/data/31688-daily-2001-2018.csv") %>%
select(Date = `Date/Time`, MaxTemp = `Max Temp (°C)`,
MinTemp = `Min Temp (°C)`, MeanTemp = `Mean Temp (°C)`) %>%
filter(Date >= "2003-01-01") %>%
bind_rows(dat %>% filter(Date < "2003-01-01"), .)
Does the above violate Hadley's guidance? Ref: r4ds, 18.3, bullet number 2:
You have multiple inputs or outputs. If there isn’t one primary object
being transformed, but two or more objects being combined together,
don’t use the pipe.
Nest piped operations into bind_rows()
dat <- bind_rows(
dat %>% filter(Date < "2003-01-01"),
read_csv("https://raw.githubusercontent.com/ConorIA/tidy-intro/master/data/31688-daily-2001-2018.csv") %>%
select(Date = `Date/Time`, MaxTemp = `Max Temp (°C)`,
MinTemp = `Min Temp (°C)`, MeanTemp = `Mean Temp (°C)`) %>%
filter(Date >= "2003-01-01")
)
Use an intermediate object.
dat2 <- read_csv("https://raw.githubusercontent.com/ConorIA/tidy-intro/master/data/31688-daily-2001-2018.csv") %>%
select(Date = `Date/Time`, MaxTemp = `Max Temp (°C)`,
MinTemp = `Min Temp (°C)`, MeanTemp = `Mean Temp (°C)`) %>%
filter(Date >= "2003-01-01")
dat <- dat %>% filter(Date < "2003-01-01") %>% bind_rows(dat2)
OR
dat <- dat %>% filter(Date < "2003-01-01")
dat2 <- read_csv("https://raw.githubusercontent.com/ConorIA/tidy-intro/master/data/31688-daily-2001-2018.csv") %>%
select(Date = `Date/Time`, MaxTemp = `Max Temp (°C)`,
MinTemp = `Min Temp (°C)`, MeanTemp = `Mean Temp (°C)`) %>%
filter(Date >= "2003-01-01")
dat <- bind_rows(dat, dat2)