【问题标题】:read.table returns extra rowsread.table 返回额外的行
【发布时间】:2013-08-01 15:55:36
【问题描述】:

我正在处理包含不同数量元素的许多长行的文本文件。行中的每个元素都由 \t 分隔,当然行由 \n 终止。我正在使用 read.table 来读取文本文件。示例文件如下:https://www.dropbox.com/s/6utslbnwerwhi58/samplefile.txt

示例文件有 60 行。

读取文件的代码:

sampleData <- read.table("samplefile.txt", as.is=TRUE, fill = TRUE);
dim(sampleData);

dim 返回 70 行,而实际上它应该是 60。当我尝试 nrows=60 时

sampleData <- read.table("samplefile.txt", as.is=TRUE, fill = TRUE, nrows = 60);
dim(sampleData);

它确实有效,但是,我不知道这样做是否会删除一些信息。我的怀疑是某些行的最后部分被添加到新行中。但是,我不知道为什么会这样,因为我有 fill = TRUE;

我也试过了

na.strings = "NA", fill=TRUE, strip.white=TRUE, blank.lines.skip = TRUE,stringAsFactors=FALSE,quote = "",comment.char = ""

但无济于事。

有人知道会发生什么吗?

【问题讨论】:

  • read.table 期望每行中的元素数量相同。你应该改用scan
  • readLines 是另一个有用的工具。
  • 我之前没有使用过 scan 或 readLines。他们似乎只是逐项阅读。如何以具有不同行的数据框格式获取它?
  • 如果您在该文件上运行count.fields,它似乎只有 8 行数据,并且每行的变量数范围为 22897-75294。

标签: r dataframe text-files


【解决方案1】:

如果没有可重现的示例,请尝试以下操作:

# Make some fake data
R <- c("1 2 3 4","2 3 4","4 5 6 7 8")
writeLines(R, "samplefile.txt")

# read line by line
r <- readLines("samplefile.txt")

# split by sep
sp <- strsplit(r, " ")

# Make each into a list of dataframes (for rbind.fill)
sp <- lapply(sp, function(x)as.data.frame(t(x)))

# now bind
library(plyr)
rbind.fill(sp)

如果这与您的实际问题相似,无论如何。

【讨论】:

  • 它有效,但需要很长时间。所以,我只是以正确的形式获取它并将其保存为 txt 文件,这样我就可以在那之后的任何时候阅读它,而无需漫长的等待。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2011-10-10
  • 2016-05-13
相关资源
最近更新 更多