仅选择超过 9 行的 CSV 文件

问题描述 投票:0回答:1

我有一个包含数百个 CSV 文件的文件夹,我正在将其加载到 R 环境中,但我只想选择包含超过 9 行数据的文件。我希望每个 CSV 文件都是自己的数据框架,用于我的下一步分析。

我已经有办法使用

读取每个单独的 CSV
filenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$"))

for(i in filenames){
  assign(i, read.csv(paste(i, ".csv", sep="")))
}

但我不知道如何只加载超过 9 行的 CSV。

r dataframe csv file for-loop
1个回答
0
投票

您可以先检查 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)
})
© www.soinside.com 2019 - 2024. All rights reserved.