我正在尝试在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)
任何人都可以为我指出正确的方向,以便将这两列最佳地编码为其中吗?
答案 0 :(得分:2)
您的代码一开始就很好。
以下代码读取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)
答案 1 :(得分:1)
这是一种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
的新列。然后,它将在" "