如何用read.table或fread读取观测被换行拆分的空格分隔数据集?
解决观测被换行截断的读取问题
我来帮你搞定这个问题!当你的观测数据被换行符硬生生拆成好几段时,不管是用base R里的read.table还是data.table的fread,都能轻松让它们持续扫描数值,直到凑出完整的一行观测。
用base R的read.table处理
核心思路就是明确告诉read.table你的数据集总共有多少列(看你的表头,一共是13列),这样它就会忽略那些碍事的换行符,把所有空格分隔的数值按列数分组,自动拼成完整的观测行。
示例代码:
# 假设你的数据文件名叫data.txt df <- read.table("data.txt", header = TRUE, # 读取第一行作为表头 ncol = 13, # 指定总列数为13 fill = TRUE, # 处理可能存在的缺失值(如果有的话) blank.lines.skip = FALSE) # 不跳过空行(如果文件里有)
原理很简单:ncol参数强制read.table把所有读取到的数值按13个一组来划分成数据行,完全不管这些数值原本在文件里被换行拆成了多少段。
用data.table的fread处理
fread本身就自带超强的自动处理能力,针对这种换行截断的情况,只需要简单设置几个参数就能搞定:
示例代码:
library(data.table) dt <- fread("data.txt", header = TRUE, fill = TRUE, # 自动填充可能的缺失列 blank.lines.skip = FALSE)
如果遇到自动检测列数不准的情况,也可以手动指定ncol=13来确保分组正确:
dt <- fread("data.txt", header = TRUE, ncol = 13, fill = TRUE)
原理:fread会扫描整个文件的所有数值,然后根据你指定的列数(或表头的列数)把数值重新组合成完整的观测行,直接无视原本的换行截断。
小提示:如果你的文件里有多余的空行,把blank.lines.skip设为TRUE就能跳过它们,不会影响数据读取。
内容的提问来源于stack exchange,提问作者dkae
相关产品推荐
相关产品推荐

