You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:35:34