read.csv 循环

read.csv in a loop

我有四个 csv 文件,我想用 for 循环输入它们。它们的大小都相同,仅文件名不同。现在我是这样做的:

Kleinheubach_GKD <- read.csv("/path_to_file/Kleinheubach.csv", skip= 10, header = T, nrows= 61, sep = ";")
Schwabelweis_GKD <- read.csv("/path_to_file/Schwabelweis.csv", skip= 10, header = T, nrows= 61, sep = ";")
Landau_GKD <- read.csv("/path_to_file/Landau.csv", skip= 10, header = T, nrows= 61, sep = ";")
Passau_GKD <- read.csv("/path_to_file/Passau.csv", skip= 10, header = T, nrows= 61, sep = ";")

这样可以,但不是很优雅,尤其是在处理大量文件时。

所以我想通过使用循环或导致相同结果的方法来完成。 这是我尝试过但没有成功的一种方法:

for (i in c("Kleinheubach", "Schwabelweis", "Landau", "Passau")) {
   assign(paste0(i,"_GKD"), read.csv(paste("/path_to_file/", i,".csv_, skip= 10, header = T, nrows= 61, sep = ";"", sep="")))
}

我很确定问题与引号的错误使用有关。 paste 命令和文件路径都需要它们。我尝试了 ""'' 的不同组合,但还没有找到适合这种情况的组合。

有人知道这种情况下的正确用法吗?

在循环中,paste 将是 paste0,它应该被关闭 )

paste0("/path_to_file/", i,".csv")

这里是用file.path构建完整文件名和lapply读取数据的方法。注意read.csv已经设置了header = TRUE,有无需重复。

filenames <- c("Kleinheubach", "Schwabelweis", "Landau", "Passau")

file.path("/path/to/file", filenames)
#[1] "/path/to/file/Kleinheubach" "/path/to/file/Schwabelweis"
#[3] "/path/to/file/Landau"       "/path/to/file/Passau"      

df_list <- lapply(file.path("/path/to/file", filenames), read.csv, skip= 10, nrows= 61, sep = ";")

names(df_list) <- paste(filenames, "GKD", sep = "_")

为了让数据集在.GlobalEnv,

list2env(df_list, envir = .GlobalEnv)