我有多个要导入R的csv文件。
如何将多个文件读入R并在第一列中添加一个带有文件名日期文本的列?
需要:
对于每个csv文件,请在文件名中找到日期,然后将其添加为每个数据帧的第一列,然后再进行rbinding。
以下是文件名中没有日期列的代码:
all <- lapply(c("file_10-16-2017.csv",
"file_10-17-2017.csv",
"file_10-18-2017.csv",
function(x){
read_csv(x, skip = 10)}) %>% bind_rows()
我希望我的最终结果看起来像这样:
Date_Pulled Week Date spot1 Site ID test
10-16-2017 10/15/17 10/16/2017 trial trial134
. . . . .
. . . . .
. . . . .
10-17-2017 10/15/17 10/16/2017 trial trial134
. . . . .
. . . . .
. . . . .
任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
首先,将要读取的所有文件放入单独的工作目录中,然后将工作目录更改为此目录。
# 1. change wd
setwd('new_file_path')
# 2. get files from that directory
my_files <- list.files()
# 3. read in all files, skipping first 10 lines
library(readr)
dat_list <- lapply(my_files, read_csv, skip = 10)
# 4. mutate a new column, which is the name of the file
library(dplyr)
dat_list_new <- lapply(dat_list, function(x) {
mutate(x,
new_col_one = names(x))
})
# 5. port this list of data frames to the global environment
names(dat_list_new) <- my_files # set the names of the dataframes
list2env(dat_list_new,envir=.GlobalEnv)
答案 1 :(得分:0)
我能够提出另一种方法:
filenames <- list.files(path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, recursive = FALSE, ignore.case = FALSE)
read_csv_filename <- function(filenames){
ret <- read.csv(filenames, skip = 10)
ret$Source <- filenames #EDIT
ret
}
import.list <- ldply(filenames, read_csv_filename)
这应该可以解决问题