计算 r 中多个文件中的列

Counting columns in multiple files in r

我有一个大型数据集(约 250,000 条记录),我使用 splitting 使数据更易于理解。我最终得到了 250 次拆分。

我想知道哪个拆分的列数最多。我知道我应该使用 list.files,但我不确定如何让它发挥作用。

我创建了以下可重现的示例:

df1 <- data.frame(A = c("a"),B = (c("b")), C = (c("c")))
df2 <- data.frame(A = c("a"),B = (c("b")))
df3 <- data.frame(A = c("a"))

write.csv(df1, file = "df1.csv", row.names=FALSE)
write.csv(df2, file = "df2.csv", row.names=FALSE)
write.csv(df3, file = "df3.csv", row.names=FALSE)

filenames <- list.files(pattern="*.csv", full.names=TRUE)

查看上面的示例,我想知道 df1 与其他文件相比具有最多的属性。

for 循环和一个简单的 ncol 函数可以使它工作吗?

如果您不想将每个文件都导入到 R 中,您可以使用 file.info() 函数来获取每个文件的大小

sapply(list.files(), file.info)

在另一种情况下,您可以使用 read.csv(..., nrows = 10) 来查看结构,而不必加载整个 table

sapply(list.files(), function(...) ncol(read.csv(..., nrows = 10)))

借用@Andriy T. 的回复,这里是将在您的每个文件中生成列列表的代码:

lapply(list.files(),function(x){ncol(read.csv(x))})

从那里,您可以 select 最大值,获取索引,并找出它对应于哪个文件。

如果您只想知道列数,

read.csvreadLines 相比非常慢:

sapply(filenames, function(x) {y=readLines(x, n=1);nchar(y)-nchar(gsub(',','',y))+1})
#./df1.csv ./df2.csv ./df3.csv 
#        3         2         1