计算 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.csv
与 readLines
相比非常慢:
sapply(filenames, function(x) {y=readLines(x, n=1);nchar(y)-nchar(gsub(',','',y))+1})
#./df1.csv ./df2.csv ./df3.csv
# 3 2 1
我有一个大型数据集(约 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.csv
与 readLines
相比非常慢:
sapply(filenames, function(x) {y=readLines(x, n=1);nchar(y)-nchar(gsub(',','',y))+1})
#./df1.csv ./df2.csv ./df3.csv
# 3 2 1