我需要读取多个csv文件并为每个文件打印前六个值。我尝试了这段代码,但是显然是错误的,因为在循环的每次迭代中di的值都会被覆盖。如何读取多个文件?
library(xlsx)
for(i in 1:7){
di = read.csv(file.choose(),header=T)
print(di)
}
d = list(d1,d2,d3,d4,d5,d6,d7)
lapply(d,head)
答案 0 :(得分:0)
如果只想打印6行或存储它们,以及是否要保留其余的csv文件,我会有些困惑。假设您只需要打印6行,然后假设您知道文件名,就可以使用
print(read.csv(filename, nlines = 6))
并为每个文件重复。另外,如果您要保存每个文件,则可以
f1 <- read.csv(filename, nlines = 6)
对每个重复一次,并使用print(head)
。
或者使用您的方法,但解决覆盖问题:
library(xlsx)
for(i in 1:7)
assign(paste0("d",i), read.csv(file.choose(),header=T))
lapply(list(d1,d2,d3,d4,d5,d6,d7),head)
使用assign
动态分配名称,以便每个名称都是唯一的并且不会互相覆盖,我认为这正是您的目标。虽然这不是很“优雅”,但适合您选择的方法
答案 1 :(得分:0)
如果您想将数据帧保留在列表中,而不是将每个数据帧分配给一个新对象。
fs <- dir(pattern = ".csv")
d <- list()
for (i in seq_along(fs)) {
d[[i]] <- read.csv(fs[[1]])
print(head(d[[i]]))
}
fs <- dir(pattern = ".csv")
d <- lapply(fs, read.csv)
lapply(d, head)
使用选项1,您需要初始化一个空列表以使用双括号[[
表示法填充和分配。使用选项2,您不需要初始化一个空列表。