我有四个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命令和文件路径都需要它们。我尝试了""和''的不同组合,但还没有找到适合这种情况的正确组合。
有人知道这种情况下的正确用法吗?
发布于 2021-01-12 01:46:06
在循环中,paste将是paste0,它应该是)
paste0("/path_to_file/", i,".csv")发布于 2021-01-12 01:53:20
这是一种使用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)https://stackoverflow.com/questions/65671970
复制相似问题