2017-02-13 12 views
1

私は、それぞれの行が別の人を表す調査回答を含むデータフレームを持っています。 1つの列(「テキスト」)は自由なテキストの質問です。その後、Tidytext :: Unnest_Tokensと一緒にネストされたリストの列のアプローチとPurrrを使用する

Satisfaction<-c ("Satisfied","Satisfied","Dissatisfied","Satisfied","Dissatisfied") 
Text<-c("I'm very satisfied with the services", "Your service providers are always late which causes me a lot of frustration", "You should improve your staff training, service providers have bad customer service","Everything is great!","Service is bad") 
Gender<-c("M","M","F","M","F") 
df<-data.frame(Satisfaction,Text,Gender) 

私は:私は、各行によってテキスト分析を行うように私は感情得点、ワードカウント、などここで

は、この例では、単純なデータフレームである含め、Tidytext :: unnest_tokensを使用したいですテキスト列を文字に変換しました。

df$Text<-as.character(df$Text) 

次はid列でグループ化し、データフレームをネストしました。

df<-df%>%mutate(id=row_number())%>%group_by(id)%>%unnest_tokens(word,Text)%>%nest(-id) 

ここまでOK働いているようだが、今どのように私は、ネストされたリストの列に「単語」上で動作するように::マップ機能purrr使うのですか?取得たとえば、各行に単語数を指定してdplyr :: mutateを使用して新しい列を作成する場合は、

また、「テキスト」列のみがネストされたリストになるようにデータフレームをネストするより良い方法がありますか?

+0

あなたが望むものはあまり明確ではありません。 'unnest_tokens'の後に停止するだけで、' purrr :: nest'を使わなくてもテキスト解析ができます。単語列のみをネストしたい場合は、 'nest(word)'を実行することができますが、最初にデータフレームを 'ungroup 'する必要があります(または、idでグループ化しないでください) – FlorianGD

答えて

0

私はpurrr::mapを使用してをやっているのが大好きですが、あなたが話していることについては、まっすぐなdplyrに固執できると思います。あなたはこのようなあなたのデータフレームを設定することができ

:見つけるために、次に

library(dplyr) 
library(tidytext) 

Satisfaction <- c("Satisfied", 
        "Satisfied", 
        "Dissatisfied", 
        "Satisfied", 
        "Dissatisfied") 

Text <- c("I'm very satisfied with the services", 
      "Your service providers are always late which causes me a lot of frustration", 
      "You should improve your staff training, service providers have bad customer service", 
      "Everything is great!", 
      "Service is bad") 

Gender <- c("M","M","F","M","F") 

df <- data_frame(Satisfaction, Text, Gender) 

tidy_df <- df %>% 
    mutate(id = row_number()) %>% 
    unnest_tokens(word, Text) 

、例えば、行あたりの単語数は、あなたがgroup_bymutateを使用することができます。

tidy_df %>% 
    group_by(id) %>% 
    mutate(num_words = n()) %>% 
    ungroup 
#> # A tibble: 37 × 5 
#> Satisfaction Gender id  word num_words 
#>   <chr> <chr> <int>  <chr>  <int> 
#> 1  Satisfied  M  1  i'm   6 
#> 2  Satisfied  M  1  very   6 
#> 3  Satisfied  M  1 satisfied   6 
#> 4  Satisfied  M  1  with   6 
#> 5  Satisfied  M  1  the   6 
#> 6  Satisfied  M  1 services   6 
#> 7  Satisfied  M  2  your  13 
#> 8  Satisfied  M  2 service  13 
#> 9  Satisfied  M  2 providers  13 
#> 10 Satisfied  M  2  are  13 
#> # ... with 27 more rows 

あなたは内部結合を実装することで、感情分析を行うことができます。 some examples hereをチェックしてください。

+0

ありがとうヘルプとサンプル! – Mike

関連する問題