0

単一の整数で識別される単一のベクトル itemlist ファイルにアイテムのリストがあります。また、各アイテムのメタデータもあります。この場合、アイテムは Amazon.com の本であり、メタ データは以下に示すさまざまな属性に関するものです。itemlist の各本について、そのタイトル、グループ、販売ランク、およびその他のいくつかを取得したいと考えています。メタデータには、DVD などの他のグループのデータが含まれていますが、それらは必要ないのでスキップしたいと考えています。メタデータ ファイルでは、各アイテムとその属性は「ID:」で始まり、空の行で終わります。私はRでたくさんのツールを試しましたが、あまり成功しませんでした。そして、誰かが助けてくれることを望んでいました。

2 本 (ID: 9 と ID: 10) のメタデータ ファイルからの抜粋を次に示します。

Id:   9
ASIN: 1859677800
  title: Making Bread: The Taste of Traditional Home-Baking
  group: Book
  salesrank: 949166
  similar: 0
  categories: 1
   |Books[283155]|Subjects[1000]|Cooking, Food & Wine[6]|Baking[4196]|Bread[4197]
  reviews: total: 0  downloaded: 0  avg rating: 0

Id:   10
ASIN: 0375709363
  title: The Edward Said Reader
  group: Book
  salesrank: 220379
  similar: 5  039474067X  0679730672  0679750541  1400030668  0896086704
  categories: 3
   |Books[283155]|Subjects[1000]|Literature & Fiction[17]|History & Criticism[10204]|Criticism & Theory[10207]|General[10213]
   |Books[283155]|Subjects[1000]|Nonfiction[53]|Politics[11079]|History & Theory[11086]
   |Books[283155]|Subjects[1000]|Nonfiction[53]|Social Sciences[11232]|Anthropology[11233]|Cultural[11235]
  reviews: total: 6  downloaded: 6  avg rating: 4
    2000-10-8  cutomer: A2RI73IFW2GWU1  rating: 4  votes:  12  helpful:   7
    2001-5-4  cutomer: A1GE54WF2WUZ2X  rating: 5  votes:  11  helpful:   8
    2001-8-27  cutomer: A36S399V1VC4DR  rating: 4  votes:   5  helpful:   3
    2002-1-26  cutomer: A280GY5UVUS2QH  rating: 3  votes:  12  helpful:   7
    2004-4-7  cutomer: A2YHZJIU4L4IOI  rating: 4  votes:  10  helpful:   2
    2004-4-27  cutomer: A1MB83EO48TRSC  rating: 4  votes:   5  helpful:   3
4

2 に答える 2

1

投稿されたデータが という名前のテキスト ファイルにあると仮定すると、myfile.txtそれを使用してもよい行だけに減らし、それを解析して長い形式のデータを生成します。grp同じ ID のフィールドを識別する列を追加します。dcast必要に応じて、 reshape2 パッケージで使用して、長い形式から広い形式に変更します。

library(reshape2)

L <- readLines("myfile.txt")

# add other fields to the regular expression as needed
ok <- grep("^Id:|^ *title:|^ *group:", L, value = TRUE)

# create data frame in long form
long <- data.frame(lab = gsub("^ *|:.*", "", ok), value = sub("^.*?: ", "", ok))
long$grp <- cumsum(long$lab == "Id")

# optionally reshape it into wide form
wide <- dcast(grp ~ lab, data = long)

最後の行は次のとおりです。

> wide
  grp group   Id                                title
1   1  Book    9 The Taste of Traditional Home-Baking
2   2  Book   10               The Edward Said Reader
于 2013-05-09T10:57:27.053 に答える
0

使用readLinesすると、これらのデータを長い文字列として R に取得できます。

z <- readLines("example-text.txt")

次に、この最初の読み込みを使用して、各レコードを個別に読み込むscanか、そのレコードを行に分割することができます。例えば:

idpos <- grep("Id",z)
scan("example-text.txt", skip=idpos[1]-1, nlines=idpos[2]-idpos[1], what="character",sep="\n")
scan("example-text.txt", skip=idpos[2]-1, nlines=length(z)-idpos[2], what="character",sep="\n")

次に、これらの文字列をさまざまな方法で解析して、別のデータ構造に変換できます。

于 2013-05-09T06:59:40.417 に答える