【问题标题】:Read Table: quotes in R阅读表:R 中的引号
【发布时间】:2016-07-24 10:37:32
【问题描述】:

我有一个 txt 文件,例如:

"cd_solicitud""nu_cuit""cd_provincia""tx_provincia"
"9531""203128827"18"Salta"
"9541""272477419"9"Entre Ríos"
"9571""273065780"2"Buenos Aires"
"6331""233703594"7"Córdoba"
"6351""272442465"5"Chaco"

我正在尝试阅读:

prov_nos<-read.table("C:/.../prov_demo.txt",
                 header=T, quote = "\"")

但我收到以下错误:

扫描错误(文件、内容、nmax、sep、dec、quote、skip、nlines、 na.strings, : 第 1 行没有 4 个元素

【问题讨论】:

  • 呃,那个文件格式是什么?说真的,这里的分隔符是什么?
  • @daroczig 也许这是某种扭曲的愚人节笑话,有人从文件中删除了所有逗号。相当虐待狂,如果你问我的话。
  • @daroczig txt 正如它所说的读取表行....
  • 另一个 R-ish 选项是使用readLines 读取它,然后手动处理每一行,拆分"\"" 或其他内容并删除零长度的条目。然后用do.call(rbind,...)将它们全部缝合在一起。
  • 你能不能把文本文件上传到像dropbox这样的地方,这样我们就可以看到原始文件,也许在粘贴时分隔符弄乱了。很难相信有人会有这种邪恶的文件格式。

标签: r import


【解决方案1】:

如果您使用readLines 将其读入,然后使用strsplit 分隔每一行的元素,则可以将其组合在一起。它不漂亮,但数据格式也不是:

the_text <- '"cd_solicitud""nu_cuit""cd_provincia""tx_provincia"
             "9531""203128827"18"Salta"
             "9541""272477419"9"Entre Ríos"
             "9571""273065780"2"Buenos Aires"
             "6331""233703594"7"Córdoba"
             "6351""272442465"5"Chaco"'
the_text <- readLines(textConnection(the_text))
df <- data.frame(do.call(rbind, strsplit(the_text[-1], '"+')))
names(df) <- strsplit(the_text[1], '"+')[[1]]
df[,1] <- NULL
df
#    cd_solicitud   nu_cuit cd_provincia tx_provincia
# 1          9531 203128827           18        Salta
# 2          9541 272477419            9   Entre Ríos
# 3          9571 273065780            2 Buenos Aires
# 4          6331 233703594            7      Córdoba
# 5          6351 272442465            5        Chaco

【讨论】:

  • 我更喜欢你的拆分标准。
  • 如何从文件中获取文本到 the_text?我也必须阅读它。
  • 您可以将textConnection(the_text) 替换为文件路径字符串。
  • 当我这样做时,我得到:> the_text head(the_text) [1] "\"cd_solicitud\"\" nu_cuit\"\"cd_provincia\"\"tx_provincia\"" [2] "\"954731\"\"203128827\"18\"Salta\"" [3] "\"954741\"\"272477419\"9 \"Entre Ríos\"" [4] "\"954771\"\"273065780\"2\"布宜诺斯艾利斯\"" [5] "\"638031\"\"233703594\"7\"科尔多瓦\"" [6] "\"638051\"\"272442465\"5\"查科\""
  • 是的,它会很丑。不用担心反斜杠;他们只是逃避引号。 strsplit 行应该可以很好地清理它。
【解决方案2】:

正如我在评论中概述的那样,对此有一些变化:

l <- readLines("~/Desktop/scratch/no_delim.txt")
foo <- function(line){
    line <- strsplit(line,"\"")[[1]]
    line <- line[nchar(line) > 0]
    line
}
l <- lapply(l,foo)

> setNames(as.data.frame(do.call(rbind,l[-1])),l[[1]])
  cd_solicitud   nu_cuit cd_provincia tx_provincia
1         9531 203128827           18        Salta
2         9541 272477419            9   Entre Ríos
3         9571 273065780            2 Buenos Aires
4         6331 233703594            7      Córdoba
5         6351 272442465            5        Chaco

我说“一些变化”是因为如果您的文件中有其他奇怪的字符、奇怪的引用或其他问题,您可能需要调整拆分和清理以处理这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2014-04-22
    • 2011-08-27
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多