Мы можем split
по первым 4 символам, используя substr
в list
из vector
с.
lst1 <- split(v1, as.integer(substr(v1, 1, 4)))
К элементам list
можно получить доступ [[
или $
lst1$`1980`
lst1$[["1980"]]
Затем мы можем прочитать над list
и rbind
наборы данных
lst2 <- lapply(lst1, function(x) do.call(rbind, lapply(x, read.csv)))
Если нам нужно записать его в CSV, не сохраняя его в list
library(readr)
for(nm in names(lst1)) {
tmp <- data.frame()
for(i in seq_along(lst1[[nm]])) {
tmp <- rbind(tmp, read_csv(lst1[[nm]][i]))
}
write_csv(tmp, path = paste0(nm, ".csv"))
rm(tmp)
}
Или с tidyverse
library(purrr)
library(readr)
library(dplyr)
lst2 <- map(lst1, ~ map_dfr(.x, read_csv))
Если вы хотите создать столбец группировки, используйте
df1 <- data.frame(v1)
df1$grp <- substr(df1$v1, 1, 4)