繁体   English   中英

如何组合多个.csv文件,并在R中添加每个数据集名称的列?

[英]How to combine multiple .csv files, and add a column with each dataset's name, in R?

我正在尝试在R中组合多个CSV文件,以便我可以进行一些预测建模。 虽然每个文件具有相同的列,并且这些列的相同顺序相同,但某些列的名称不同。 到目前为止,我的代码将文件组合得很好并剥离了标题。 但是,我现在需要它做的是为每个CSV添加另外两列日期。 每个CSV的文件名包含日期。

文件名的格式如下:“2017年1月”,“2017年2月”,“2017年3月”等。

所以我希望这两个列是月份和年份。

下面是我到目前为止使用的代码。 它将所有CSV组合成一个,但不会创建我需要的两个额外列。

dat <- setwd('C:/Users/ . . . /Historical Data')

file_names <- dir(dat)
dataset <- do.call(rbind, lapply(file_names, read.csv, skip = 1, header = FALSE))
dataset <- do.call(rbind, lapply(file_names, read.csv, header = FALSE, function(x) cbind(read.csv(x), name=strsplit(x,'\\.')[[1]][1])))

head(dataset)

任何人都可以指出我如何最好地将这两列编码到这个方向的正确方向?

你的代码开始时非常好。

以下代码读取file_list每个元素,并将其附加到空列表中。 然后它将所有元素绑定在一起。 它适合批量读取文件并将其文件名保存在单独的列中。

试着这样做:

library(data.table)
file_list <- list()
file_list <- lapply(file_names, function(x){
                    ret <- read_csv(x)
                    ret$origin <- x
                    return(ret)})
df <- rbindlist(file_list)

这是一个完成你需要的library(tidyverse)方法,你仍然可以将你的工作目录设置到它需要的位置,而不是使用dir()你可以使用list.files()

dat_files <- list.files(".../Historical Data", pattern='*.csv')

map_df(dat_files, ~read_csv(.x) %>%
                 mutate(month_year = str_remove_all(.x, ".csv", "")) %>%
                 separate(month_year, into=c("Month", "Year"), sep=" ")
)

此代码将所有文件读入一个df,并使用文件名创建一个没有附加.csv的新列。 然后它将该列分隔为Month和Year列,分隔为" "

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM