2

統一犯罪報告書のデータを含む大きなテキスト ファイルがあります。理想的には、データのみをインポートし、ファイル内の他の無関係なものを除外したいと考えています。実際のデータはスペースで区切られ、データが別の「ページ」に移動すると、ヘッダー情報が繰り返されます。最初に、次のコードを使用してデータ (およびデータのみ) をインポートし、独自のヘッダーを手動で追加しようとしました。

  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プログラマーであり、答えをグーグルで検索し、スタックオーバーフローを検索しようとしましたが、ここからどこへ行くべきか途方に暮れています。これは、インポートしようとしているテキスト ファイルへのリンクです。繰り返しますが、データをインポートして、完全なデータセットに必要のないヘッダー情報またはその他の部分を含む行を削除しようとしています。

誰でも提供できるヘルプは大歓迎です。

4

1 に答える 1

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.startとの正規表現に一致する行の間にあるすべての行を保持しgroup.end、残りを破棄します。

于 2012-11-15T00:22:34.827 に答える