【问题标题】:Counting columns in multiple files in r在r中计算多个文件中的列
【发布时间】:2015-10-02 06:17:47
【问题描述】:

我有一个大型数据集(约 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 csv dataframe multiple-columns


    【解决方案1】:

    如果您只想知道列数,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 
    

    【讨论】:

    • 完美解决方案。谢谢你。有没有办法对输出进行排序?
    • 也许通过使用 ... sort(sapply(...))?
    • 有道理。谢谢。
    • 由于某种原因,每个文件我都得到“1”,但我知道的每个文件都有 12 或 13 列。有什么想法吗?我正在使用以下代码从工作目录中读取文件: filenames
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      从那里,您可以选择最大值,获取索引,并找出它对应的文件。

      【讨论】:

        猜你喜欢
        • 2019-04-19
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 2017-05-28
        • 2018-12-24
        • 2019-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多