2016-12-12 8 views
0

私はドラマの中低、中、高のどれくらい、データフレームにいくつの低、中、高の犯罪があるか知りたいと思っています。ここで複数の値を含む列のあるクロステーブルR

は私のデータフレームのサンプルです:

       genres class_rentabilite 
         Crime, Drama   Medium 
    Action, Crime, Drama, Thriller   High  
Action, Adventure, Sci-Fi, Thriller   Medium 
           Drama   Low 
         Crime, Drama   High 
         Comedy, Drama   high 

私は私のデータでは、別の列にtable()を使用し、それが働いた:

table(df$language, df$class_rentabilite) 

上記のコードは、これを与える:

   Low Medium High NA 
        1  1  0 3 
    Aboriginal  0  0  2 0 
    Arabic   0  0  1 3 
    Aramaic   1  0  0 0 
    Bosnian   1  0  0 0 
    Cantonese  5  2  1 3 

このアプローチをサンプルデータに使用したいが、table()が機能しないgenresの各行に複数の値があります。この状況をどうやって解決できますか?

答えて

3

ここでは、1つのアプローチを示します。あなたはseparate_rows()でジャンルを分割し、一時的なデータフレームを作成します。その後、あなたがしたようにtable()を使用します。

library(dplyr) 
library(tidyr) 

mydf %>% 
separate_rows(genres, sep = ", ") -> foo 

table(foo$genres, foo$class_rentabilite) 

#   High Low Medium 
# Action  1 0  1 
# Adventure 0 0  1 
# Comedy  1 0  0 
# Crime  2 0  1 
# Drama  3 1  1 
# Sci-Fi  0 0  1 
# Thriller  1 0  1 

DATA

mydf <- structure(list(genres = c("Crime, Drama", "Action, Crime, Drama, Thriller", 
"Action, Adventure, Sci-Fi, Thriller", "Drama", "Crime, Drama", 
"Comedy, Drama"), class_rentabilite = c("Medium", "High", "Medium", 
"Low", "High", "High")), .Names = c("genres", "class_rentabilite" 
), row.names = c(NA, -6L), class = "data.frame") 
+0

ありがとうございました。 SciやFiのようないくつかのエラーが別のグループに分割されていても、これは多くの役に立ちます。 –

+0

@ Y.Pコードを改訂しました。私はこれがあなたが望むものだと思います。 :) – jazzurro

+1

'separate_rows'の使い方 – akrun

関連する問題