我已将一组 .csv 文件从目录导入到如下列表文件中。
features <- c("ASB_aggregated_by_lsoa_2015.csv", "ASB_aggregated_by_lsoa_2019.csv", "ASB_aggregated_by_lsoa_2022.csv", "Bicycle_theft_aggregated_by_lsoa_2015.csv", "Bicycle_theft_aggregated_by_lsoa_2019.csv", "Bicycle_theft_aggregated_by_lsoa_2022.csv", "Burglary_aggregated_by_lsoa_2015.csv", "Burglary_aggregated_by_lsoa_2019.csv", "Burglary_aggregated_by_lsoa_2022.csv", "Criminal_damage_and_arson_aggregated_by_lsoa_2015.csv", "Criminal_damage_and_arson_aggregated_by_lsoa_2019.csv", "Criminal_damage_and_arson_aggregated_by_lsoa_2022.csv", "Drugs_aggregated_by_lsoa_2015.csv", "Drugs_aggregated_by_lsoa_2019.csv", "Drugs_aggregated_by_lsoa_2022.csv", "Other_crime_aggregated_by_lsoa_2015.csv", "Other_crime_aggregated_by_lsoa_2019.csv", "Other_crime_aggregated_by_lsoa_2022.csv", "Other_theft_aggregated_by_lsoa_2015.csv", "Other_theft_aggregated_by_lsoa_2019.csv", "Other_theft_aggregated_by_lsoa_2022.csv")
每年的档案都有类似的栏目,但每个档案的案件数量不同。首先,我想将相似年份(2015 年、2019 年和 2022 年)的所有文件合并到同一个数据框中,并根据它们的相似列进行完整连接。最后,我每年都会有 3 个数据框。
谢谢你
首先设置一些测试文件并创建
features
。现在将文件读入 DFs
并创建一个 years
向量,该向量给出 DFs
中每个条目的相应年份,通过 DFs
拆分 years
给出 spl
。然后对于拆分的每个组件执行合并。
# set up test files
for(year in c(2015, 2019, 2022))
for(let in letters[1:3])
write.csv(BOD + year + match(let, letters), paste0("BOD-", year, let, ".csv"),
row.names = FALSE, quote = FALSE)
features <- dir()
# we now have features and the test files so process them
DFs <- Map(read.csv, features)
years <- gsub("\\D", "", features)
spl <- split(DFs, years)
L <- lapply(spl, \(x) Reduce(function(x, y) merge(x, y, by="Time", all=TRUE), x))
str(L) # show structure of result
给予:
List of 3
$ 2015:'data.frame': 9 obs. of 4 variables:
..$ Time : int [1:9] 2017 2018 2019 2020 2021 2022 2023 2024 2025
..$ demand.x: num [1:9] 2024 2026 2035 2032 2032 ...
..$ demand.y: num [1:9] NA 2025 2027 2036 2033 ...
..$ demand : num [1:9] NA NA 2026 2028 2037 ...
$ 2019:'data.frame': 9 obs. of 4 variables:
..$ Time : int [1:9] 2021 2022 2023 2024 2025 2026 2027 2028 2029
..$ demand.x: num [1:9] 2028 2030 2039 2036 2036 ...
..$ demand.y: num [1:9] NA 2029 2031 2040 2037 ...
..$ demand : num [1:9] NA NA 2030 2032 2041 ...
$ 2022:'data.frame': 9 obs. of 4 variables:
..$ Time : int [1:9] 2024 2025 2026 2027 2028 2029 2030 2031 2032
..$ demand.x: num [1:9] 2031 2033 2042 2039 2039 ...
..$ demand.y: num [1:9] NA 2032 2034 2043 2040 ...
..$ demand : num [1:9] NA NA 2033 2035 2044 .
您可以通过使用文件名创建数据框,提取年份(例如
mutate(year=str_extract(filename,"20[0-9]+"))
),然后继续使用 group_by(year)
和 map_dfr()
对分组数据框执行其他操作来完成您想做的事情。这将为您提供一个包含年份的单个数据框,您可以手动对其进行子集化。
如果没有这些文件或至少不知道其结构,就很难了解更多细节。另外,您似乎有 2011 年和 2021 年的 "Census_combined_data"
,但没有这些年份的其他数据,这当然会破坏工作流程,因为您丢失了文件并且拥有具有不同结构的文件。