2017-09-18 6 views
0

tidytextパッケージを推奨するlawyeRのおかげです。私のサンプルデータでうまく機能しているようなパッケージに基づいたコードがいくつかあります。テキスト列の値が空白の場合でもうまく機能しません。 (これが起こる時があり、それをフィルタリングするのではなく、空白を残しておくことは意味をなさないでしょう).TVARの最初の観測を説明するためにブランクに設定しました。このコードはこの観察を落とします。どのように観測を維持し、各単語の頻度をゼロに設定するためにRを得ることができますか?私はいくつかのifelseステートメントを使用して、パイプを使用しないで試しました。しかし、うまくいきません。 troulbeは、tidytextパッケージのunnest_tokens関数を中心にしているようです。Rテキストマイニング:データフレームから文書用語行列を作成し、データフレームに変換し、元のデータフレームから列を保持します

sampletxt$TVAR[1] <- "" 

chunk_words < - sampletxt%>%

GROUP_BY(PTNO、DATE、TYPE)%>%

unnest_tokens(ワード、TVAR、to_lower = FALSE)%>%

私が持っている(ワード)%>%

スプレッド(ワード、nは、0)

を数えますRデータフレーム。私はそれを使って文書用語行列を作成したいと思います。おそらく、私はそれを行うためにtmパッケージを使用したいと思いますが、他の方法があるかもしれません。私はその後、その行列をデータフレームに戻したいと思っています。私は、最終データフレームに、元のデータフレームからの変数を特定する必要があります。

質問はどうすればいいですか?私は同様の質問に対する答えを見つけましたが、これはテキストと単一のID変数を持つデータフレームのためのものでした。私のデータには、特定のテキストレコードを識別する約半ダースの変数がある可能性があります。これまでは、単一のID変数のためにソリューションをスケールアップしようとする試みは、すべて成功したとは証明されていませんでした。

以下にいくつかのサンプルデータを示します。私は解決できた別の仕事のためにこれらを作りました。

テキストエントリの各単語に追加の頻度の列を持ち、PTNO、DATE、TYPEなどの変数を保持するこのデータフレームのバージョンを取得するにはどうすればよいですか?

sampletxt <- 

構造(

list(

    PTNO = c(1, 2, 2, 3, 3), 

    DATE = structure(c(16801, 16436, 16436, 16832, 16845), class = "Date"), 

    TYPE = c(

    "Progress note", 

    "Progress note", 

    "CAT scan", 

    "Progress note", 

    "Progress note" 

), 

    TVAR = c(

    "This sentence contains the word metastatic and the word Breast plus the phrase denies any symptoms referable to.", 

    "This sentence contains tnm code T-1, N-O, M-0. This sentence contains contains tnm code T-1, N-O, M-1. This sentence contains tnm code T1N0M0. This sentence contains contains tnm code T1NOM1. This sentence is a sentence!?!?", 

    "This sentence contains Dr. Seuss and no target words. This sentence contains Ms. Mary J. blige and no target words.", 

    "This sentence contains the term stageIV and the word Breast. This sentence contains no target words.", 

    "This sentence contains the word breast and the term metastatic. This sentence contains the word breast and the term stage IV." 

)), .Names = c("PTNO", "DATE", "TYPE", "TVAR"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L)) 
+0

tidytextパッケージを見ましたか?これは、tmパッケージよりもはるかにやさしいです。 – lawyeR

+0

ありがとうLawyeR。あなたの提案に基づいて私が追加した部分的な解決策を見てください。 – Paul

答えて

0

quantedaパッケージは、より速く、より簡単TMよりも、同様に tidytext とうまく動作しますが、ここでそれを行う方法は次のとおりです。

これらの操作では、オブジェクトからコーパスを作成し、ドキュメントフィーチャマトリックスを作成してから、特徴数を持つ変数。 (追加のオプションは、dfmの作成時に利用できます。?dfmを参照してください)。

library("quanteda") 
samplecorp <- corpus(sampletxt, text_field = "TVAR") 
sampledfm <- dfm(samplecorp) 
result <- cbind(docvars(sampledfm), as.data.frame(sampledfm)) 

次に、変数をグループ化して結果を得ることができます。 (ここでは最初の6列のみを表示しています)

dplyr::group_by(result[, 1:6], PTNO, DATE, TYPE) 
# # A tibble: 5 x 6 
# # Groups: PTNO, DATE, TYPE [5] 
# PTNO  DATE   TYPE this sentence contains 
# * <dbl>  <date>   <chr> <dbl> <dbl> <dbl> 
#  1  1 2016-01-01 Progress note  1  1  1 
#  2  2 2015-01-01 Progress note  5  6  6 
#  3  2 2015-01-01  CAT scan  2  2  2 
#  4  3 2016-02-01 Progress note  2  2  2 
#  5  3 2016-02-14 Progress note  2  2  2 

packageVersion("quanteda") 
# [1] ‘0.99.6’ 
+0

asMethod(オブジェクト)のエラー:Cholmodエラー 'ファイルが大きすぎます' ../Core/cholmod_dense.c、行105 – Paul

+0

絶対に素晴らしいです。魔法のように。実際、あなたのパッケージ "teda"の名前の最後の4文字は "ta-dah!"というフレーズを思い出させます。私の実際のデータでもすばやく蘭を実行します。少なくとも "結果"が出るまでは。そこに私はエラーが表示されます:asMethod(オブジェクト)のエラー:Cholmodエラー 'ファイルが大きすぎます' ../Core/cholmod_dense.c、行105行目。私はそれを見て、単にメモリが足りなくなったようです。あなたのパッケージが「並列計算に16スレッドのうち16スレッド」を使用していたというメモもありました。私は大きなデータについて学び始めたばかりです。私は試してみたいことがあるかどうか疑問に思っていました。 – Paul

+0

素晴らしい!昨日 'cbind.dfm'を改良しました...' devtools :: install_github( "kbenoit/quanteda") 'を使って再インストールしてみてください。 CRANリフレッシュが差し迫っています。 –

関連する問題