【问题标题】:Importing text data into R and removing extraneous headers and other unwanted text将文本数据导入 R 并删除无关的标题和其他不需要的文本
【发布时间】:2012-11-14 23:28:51
【问题描述】:

我有一个大文本文件,其中包含来自统一犯罪报告的数据。理想情况下,我想做的只是导入数据并忽略文件中的其他无关内容。实际数据由空格分隔,当数据进入另一个“页面”时,标题信息会重复。我首先尝试使用以下代码导入数据(并且仅导入数据)并手动添加我自己的标题:

  data <- read.fwf("2010SHRall.txt", 
        c(-4,3,8,2,4,5,6,5,4,3,3,4,4,3,3,4,6,5,3,6,26,3),   
        skip=5,       
        col.names=c("AGE","AGENCY","G","MO","HOM","INC","SIT","VA","VS","VR","VE","OA","OS","OR","OE","WEAP","REL","CIR","SUB","AGENCYNAME","STATE"), 
        strip.white=FALSE)

这行得通,然后在第 51 行退出。我绝对是一个新手 R 程序员,我试图用谷歌搜索答案以及搜索 Stack Overflow,但我不知道从这里去哪里。这是我要导入的文本文件的a link。同样,我正在尝试导入数据并删除任何包含标题信息的行或完整数据集不需要的其他部分。

任何人都可以提供任何帮助将不胜感激。

【问题讨论】:

  • 我改变了答案,现在我认为它是正确的。
  • 这很好用。非常感谢您的帮助!

标签: r text import text-files


【解决方案1】:

这应该可行:

text <- readLines('/tmp/2010SHRall.txt')
group.start <- '^      AGENCY'
group.end <- '(^B)|(^0END OF GROUP)'
data <- character()
inside.group <- FALSE
for (line in text) {
  if (inside.group) {
    if (grepl(group.end, line))
      inside.group <- FALSE
    else
      data <- append(data, line)
  } else if (grepl(group.start, line)) {
    inside.group <- TRUE
  }
}
read.fwf(textConnection(data),
         widths=c(-4,3,8,2,4,5,6,5,4,3,3,4,4,3,3,4,6,5,3,6,26,3),
         header=FALSE,
         col.names=c("AGE","AGENCY","G","MO","HOM","INC","SIT","VA","VS","VR","VE","OA","OS","OR","OE","WEAP","REL","CIR","SUB","AGENCYNAME","STATE"), 
         strip.white=TRUE)

它保留与group.startgroup.end 正则表达式匹配的行之间的所有行,并丢弃其余行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 2018-01-03
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多