如何拆分Bash统计结果的单列数据为两列,或优化大文件提取方法?
两种解决方案:拆分现有数据或直接用R处理大文件
一、在R中拆分已导入的单列数据
你导入的每一行是包含计数和名称的字符串(比如123 Chelsea),可以用正则表达式拆分,不管名称里有没有空格都能处理:
Base R 实现
假设导入的数据框为df,单列的列名为raw:
# 提取开头的数字作为计数列 df$count <- as.integer(sub("^(\\d+).*", "\\1", df$raw)) # 提取数字后的名称部分,去掉多余空格 df$name <- trimws(sub("^\\d+\\s+", "", df$raw)) # 删除原始单列 df$raw <- NULL
tidyr 包实现
如果习惯用tidyverse语法,用separate_wider_regex更直观:
library(tidyr) library(dplyr) df <- df |> separate_wider_regex( raw, patterns = list(count = "\\d+", name = ".*") ) |> mutate( count = as.integer(count), name = trimws(name) )
二、更高效的大文件处理方法(跳过shell命令直接用R统计)
对于大文件,直接用R处理可以避免生成中间文件,速度更快且更灵活,推荐用以下两种工具:
data.table(适合超大型文件,速度最快)
library(data.table) # 仅读取第2列,避免加载无关数据 dt <- fread("your_file_path", select = 2) # 按第2列的值分组统计次数 result <- dt[, .N, by = V1] # 重命名列 setnames(result, c("name", "count"))
vroom + dplyr(语法更友好,速度接近data.table)
library(vroom) library(dplyr) vroom("your_file_path", col_select = 2) |> group_by(value) |> summarize(count = n()) |> rename(name = value)
内容的提问来源于stack exchange,提问作者JVevermind
相关产品推荐
相关产品推荐

