1

ソース、日付、および ID 変数とともに、セマンティック タグ/セマンティック タグ カテゴリのフィールドがあります。セマンティック タグ フィールドをそれぞれのタグ/タグ カテゴリに分割してから、データセットを転置したいと考えています。私はほとんどのコードを完成させましたが、ID/日付/ソース変数を取得して、タグのカテゴリ/タグから作成したマトリックスを一覧表示することにまだ行き詰まっています。私が開始するデータの例 (タブ区切り) は次のとおりです。

ID  Source  Date  Semantic Tags
1 thestate  2013-01-18  Person:elizabeth colbert-busch, Organization:congress
2 abcnews4  2013-04-03  PoliticalEvent:congressional race, Person:colbert busch, topicname:politics
3 Politics  2013-04-02  Person:mark sanford, Person:elizabeth colbert busch, Person:colbert busch, Organization:republican party

データをデータベース形式 (タブ区切り) のようにしたい:

ID  Source  Date  Tag Type  Tag
1 thestate  2013-01-18  Person  elizabeth colbert-busch
1 thestate  2013-01-18  Organization  congress
2 abcnews 2013-04-03  Political event congressional race
2 abcnews 2013-04-04  Person  colbert-busch
2 abcnews 2013-04-05  topicname politics
3 Politics  2013-04-02  person  mark sanford
3 Politics  2013-04-03  person  elizabeth colbert-busch
3 Politics  2013-04-04  organization  republican party

タグタイプとタグを分離するのに問題はありません(thnx @Tyler Rinkerの助けを借りて...)が、タグタイプ/タグをリストごとに繰り返すためにID、ソース、および日付変数を取得することに行き詰まったとき私が作成するマトリックス。誰でも助けることができますか?私のコードは以下の通りです:

et3 <- lapply(strsplit(as.character(et$Semantic.Tags), ","), function(x) gsub("^//s+|//s+$", "", x)) # break out semantic tags/tag type by comma

et3 <- lapply(et3, strsplit, ":(?!/)", perl=TRUE) # break on colon

次のコード行では、他の 3 つの変数を複製しようとしていますが、ここで問題が発生します。

Date <- rep(et$Date, seq_along(et3), sapply(et3, length))

ID <- rep(et$ID, seq_along(et3), sapply(et3, length)) # Note that if I don't use "et$ID", the IDs replicate without issue...

...変数 Source についても同様です。私が受け取った警告メッセージは次のとおりですIn rep(et$Date, seq_along(et3), sapply(et3, length)): first element used of 'length.out' argument.。最初の値のみが出力に表示されます。最初に et3 リストをマトリックスとしてバインドすると、同じ問題が発生します。マトリックス/リストで変数を繰り返すのを手伝ってくれる人はいますか? 転置コマンドも試してみたのですが、リスト化したタグの扱いがわかりません。

誰の助けにも感謝します。

4

1 に答える 1

4
# 1. create a matrix containing the expanded information for each row
#
et3 <- lapply(et3, function(x) {xx <- do.call(rbind, x)
  colnames(xx) <- c('tag','value')
  xx})
 # 2. cycle through each row and recombine

 do.call(rbind, lapply(seq_len(nrow(edt)), 
    function(x) cbind(edt[x, 1:3, drop = FALSE], et3[[x]])))

data.table アプローチ

# an alternative is to use data.table
library(data.table)
EDT <- data.table(edt)
# string processing
EDT[, sc := lapply(strsplit(as.character(Semantic.Tags), ","), function(x) gsub("^//s+|//s+$", "", x)) ]
 EDT[, et3 := lapply(et3, strsplit, ":(?!/)", perl=TRUE)]

# rapply and by to create data.table  
EDT[, list(tag = rapply(et3, classes = 'character', function(x)x[1]), 
           value = rapply(et3, classes = 'character', function(x)x[2])), 
      by = list(ID, Source,Date)]



   ID   Source       Date            tag                   value
1:  1 thestate 2013-01-18         Person elizabeth colbert-busch
2:  1 thestate 2013-01-18   Organization                congress
3:  2 abcnews4 2013-04-03 PoliticalEvent      congressional race
4:  2 abcnews4 2013-04-03         Person           colbert busch
5:  2 abcnews4 2013-04-03      topicname                politics
6:  3 Politics 2013-04-02         Person            mark sanford
7:  3 Politics 2013-04-02         Person elizabeth colbert busch
8:  3 Politics 2013-04-02         Person           colbert busch
9:  3 Politics 2013-04-02   Organization        republican party
于 2013-04-22T04:12:14.443 に答える