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

已加载文本行到内存,如何无需fread()直接转换为数据框?

直接把lines_new转成数据框的实操方法

你已经把处理好的行存在lines_new里了,完全不用再调用fread,直接拆分转换就行,分两步走:

第一步:先把列名抠出来

首先找到那行#@开头的列名行,去掉前缀拆分就行:

# 定位#@开头的列名行
colname_line <- lines_new[grepl("^#@", lines_new)]
# 去掉#@前缀,按你文件的实际分隔符拆分(这里假设是制表符,可换成","或"\\s+")
col_names <- strsplit(sub("^#@", "", colname_line), "\t")[[1]]

第二步:把数据行转成数据框

先过滤掉所有带#的注释行,剩下的就是纯数据行,然后选合适的方法转换:

方法一:用基础包的read.table(简单直接)

# 筛掉所有注释行
data_lines <- lines_new[!grepl("^#", lines_new)]
# 直接用text参数读入内存里的行
df <- read.table(text = data_lines, sep = "\t", col.names = col_names, stringsAsFactors = FALSE)

方法二:用data.table的rbindlist(200万行更高效)

如果是200万行这种大数据量,用data.table的方法速度更快:

library(data.table)
# 先筛出数据行
data_lines <- lines_new[!grepl("^#", lines_new)]
# 把每一行拆成列表,再合并成data.table
data_list <- lapply(data_lines, function(x) strsplit(x, "\t")[[1]])
dt <- rbindlist(lapply(data_list, as.list))
# 给列名赋值
setnames(dt, col_names)

注意点

  • 分隔符要对应你的文件:如果是多个空格分隔,strsplit里用"\\s+",read.table里sep设为""即可自动识别。
  • 如果数据里有带引号的字段,记得给read.table加quote = "\""这类参数,避免拆分出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:03