我有一个包含数百个 CSV 文件的文件夹,我正在将其加载到 R 环境中,但我只想选择包含超过 9 行数据的文件。我希望每个 CSV 文件都是自己的数据框架,用于我的下一步分析。
我已经有办法使用
读取每个单独的 CSVfilenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$"))
for(i in filenames){
assign(i, read.csv(paste(i, ".csv", sep="")))
}
但我不知道如何只加载超过 9 行的 CSV。
您可以先检查 nrow,然后只加载通过的文件。在 Linux 上我们可以使用
wc
。为了简洁起见,这里使用两行以上的示例。我们需要加一,> 2L + 1L
,因为标题也算作行。
> (fls3 <- system('for file in *.csv; do echo "$(wc -l < "$file"),$file"; done',
+ intern=TRUE) |>
+ read.csv(text=_, header=FALSE) |>
+ subset(V1 > 2L + 1L))
V1 V2
1 4 file01.csv
3 4 file03.csv
> lapply(fls3$V2, read.csv) |> setNames(fls3$V2)
$file01.csv
X1 X2 X3 X4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
$file03.csv
X1 X2 X3 X4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
数据:
## produces 3 .csv files w/ 4, 3, 4 rows and 4 columns
setwd('~/sandbox')
n <- 3
set.seed(42)
lapply(seq_len(n), \(i) {
o <- if (rnorm(1) > 0) {
data.frame(matrix(1:12, 3, 4))
} else {
data.frame(matrix(1:8, 2, 4))
}
write.csv(o, sprintf('file%02d.csv', i), row.names=FALSE)
})