【问题标题】:Error in read.table with colClasses带有 colClasses 的 read.table 中的错误
【发布时间】:2015-03-06 14:31:13
【问题描述】:

我会读取一个文本文件(使用 read.table),其中包含三列中的一列,其中包含诸如“000000”之类的字符,但我得到的是 0。我尝试:

X<-read.table(ouvrefic, header=TRUE, row.names=1, sep="",colClasses=c("integer","character","factor"))

我得到:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
scan() expected 'an integer', got '"1"' (problem comes from row.names, I suppose)

我该怎么做?

非常感谢。

我的文本文件的开头:

"" "dates" "Atscan2" "pqrPQR"
"1" "18369" "0000000000000" "1110"
"2" "18369" "0000000000000" "1220,0"
"3" "18369" "0000000000000" "2220"
"4" "18369" "0000000000000" "1230,0,0"
"5" "18369" "0000000000000" "1330,0"
"6" "18369" "0000000000000" "2330,0"
"7" "18369" "0000000000000" "3330"

【问题讨论】:

  • 你能给我们看一下文件的一部分吗(前几行)?
  • "" "日期" "Atscan2" "pqrPQR" "1" "18369" "0000000000000" "1110" "2" "18369" "0000000000000" "1220,0" "3" "18369 ""0000000000000""2220""4""18369""0000000000000""1230,0,0""5""18369""0000000000000""1330,0""6""18369""0000000000000""2330,0 ""7""18369""0000000000000""3330"
  • 请将其编辑到您的问题中,以便我们可以正确查看格式。
  • @Lio 这个链接可能会有所帮助r.789695.n4.nabble.com/…

标签: r read.table


【解决方案1】:

问题出在colClasses 参数中:

首先,即使您将第一列用作row.names,您也有 4 列。因此,您需要该向量中的四个元素。

其次,如果您需要正确显示所有零,则需要将该列作为字符。

以下作品:

df <- read.table(header=T, text='"" "dates" "Atscan2" "pqrPQR"
"1" "18369" "0000000000000" "1110"
"2" "18369" "0000000000000" "1220,0"
"3" "18369" "0000000000000" "2220"
"4" "18369" "0000000000000" "1230,0,0"
"5" "18369" "0000000000000" "1330,0"
"6" "18369" "0000000000000" "2330,0"
"7" "18369" "0000000000000" "3330"', 
row.names=1, 
colClasses=c('character', 'character',"character","factor"))

输出:

> df
  dates       Atscan2   pqrPQR
1 18369 0000000000000     1110
2 18369 0000000000000   1220,0
3 18369 0000000000000     2220
4 18369 0000000000000 1230,0,0
5 18369 0000000000000   1330,0
6 18369 0000000000000   2330,0
7 18369 0000000000000     3330

您在上面看到的问题是,如果引用列的元素(如日期列),那么在 colClasses 中使用 integer 选项将不起作用(因此我也将其转换为字符)。之后您可以随时使用as.integer 并将其转换为整数。

Akrun 在 cmets 中提供了一个直接的解决方案,它首先删除从 readLines 读取的双引号,然后在列上应用 colClasses

 df <- read.table(text=gsub('[\\"]', '', readLines('ouvrefic.txt')),
                  row.names=1, 
                  colClasses=c('character', 'integer', 'character', 'factor'))

【讨论】:

  • 不应该dates 列是integer OP 的帖子中所建议的吗?
  • @akrun 是的,这就是我想要做的,但如果您将其指定为 integer 似乎会失败,因为日期列元素周围有双引号。不过,您可以在 df 形成后执行此操作。
  • 一个选项可能是df &lt;- read.table(text=gsub('[\\"]', '', readLines('ouvrefic.txt')), row.names=1, colClasses=c('character', 'integer', 'character', 'factor')),不确定这是否有用
  • @akrun 将工作 Akrun。如果我是你,我会把它作为解决方案发布。
  • 您可以将其作为一个选项进行更新。我的解决方案作为新解决方案发布并不是那么优雅:-)
【解决方案2】:

你也可以在colClassesrow.names = 1时使用NA

writeLines('"" "dates" "Atscan2" "pqrPQR"
"1" "18369" "0000000000000" "1110"
"2" "18369" "0000000000000" "1220,0"
"3" "18369" "0000000000000" "2220"
"4" "18369" "0000000000000" "1230,0,0"
"5" "18369" "0000000000000" "1330,0"
"6" "18369" "0000000000000" "2330,0"
"7" "18369" "0000000000000" "3330"', "x.txt")

df <- read.table("x.txt", header = TRUE, 
     row.names = 1, colClasses = c(NA, NA, "character", NA))

sapply(df, class)
#      dates     Atscan2      pqrPQR 
#  "integer" "character"    "factor" 
df
#   dates       Atscan2   pqrPQR
# 1 18369 0000000000000     1110
# 2 18369 0000000000000   1220,0
# 3 18369 0000000000000     2220
# 4 18369 0000000000000 1230,0,0
# 5 18369 0000000000000   1330,0
# 6 18369 0000000000000   2330,0
# 7 18369 0000000000000     3330

另外,如果您使用的是基于 Linux 的系统,您可以使用 system() 删除所有引号,并使其更容易一些

read.table(
    text = system("cat x.txt | tr -d \\\"", intern = TRUE), 
    colClasses = c(Atscan2 = "character")
)
#   dates       Atscan2   pqrPQR
# 1 18369 0000000000000     1110
# 2 18369 0000000000000   1220,0
# 3 18369 0000000000000     2220
# 4 18369 0000000000000 1230,0,0
# 5 18369 0000000000000   1330,0
# 6 18369 0000000000000   2330,0
# 7 18369 0000000000000     3330

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多