You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R中不加载数据直接统计大型CSV文件的行数?

绝对有!处理超大CSV的时候,把整个文件加载进R确实太耗时间了,下面给你几个不用读全量数据就能快速统计记录数的方法:

方法一:直接用系统命令(最快首选)

系统级命令是处理大文件的最优解,完全不用碰R,速度快到飞起:

  • Linux/macOS 终端
    统计总行数(包含表头):
    wc -l your_file.csv
    
    如果要排除表头,直接计算真实记录数:
    wc -l your_file.csv | awk '{print $1 - 1}'
    
  • Windows 环境
    用命令提示符统计总行数:
    find /c /v "" your_file.csv
    
    排除表头的话,用PowerShell更方便:
    (Get-Content your_file.csv | Measure-Object -Line).Lines - 1
    
方法二:在R环境内快速统计(不用离开R)

如果不想切换到终端,R里也有不用加载全量数据的方法:

  • readLines计数
    这个函数只会读取文件的行数,不解析任何数据,速度远快于read.csv
    # 总行数减1(排除表头)
    record_count <- length(readLines("your_file.csv")) - 1
    
  • vroom包(专为大文件优化)
    vroom是处理大CSV的神器,它的vroom_lines函数可以高效读取行数:
    library(vroom)
    record_count <- length(vroom_lines("your_file.csv")) - 1
    
  • 调用系统命令到R里
    也可以在R里直接调用前面的系统命令,不用切换环境:
    # Linux/macOS 下
    record_count <- as.integer(system("wc -l your_file.csv | awk '{print $1 - 1}'", intern = TRUE))
    
    # Windows PowerShell 下
    record_count <- as.integer(system('powershell "(Get-Content your_file.csv | Measure-Object -Line).Lines - 1"', intern = TRUE))
    

小提示:如果你的CSV里有换行符(比如某个字段里包含\n),wc -l或者readLines可能会统计错误,这种情况下可以用data.tablefread,它能正确解析带换行符的CSV,而且可以只计数不加载全量:

library(data.table)
# fread会自动识别表头,直接返回记录数
record_count <- nrow(fread("your_file.csv", select = 1)) # 只读取第一列,减少内存占用

内容的提问来源于stack exchange,提问作者hawkaterrier

火山引擎 最新活动