Rを使って3次元のクロス集計をしたいと考えています。
これまでExcelのピボットテーブルで行っていた作業をR上で行いたいというイメージです。
分析対象データ
1列目(果物)には"りんご"、"みかん"、"いちご"
2列目(食べ方)には"がむ"、"ジュース"、"そのまま"
3列目(被験者名)には被験者名(重複=繰り返しあり)
4列目(おいしさ)には得点(10点満点)
がランダムに10万行程度入っているイメージです。
☆教えて頂きたいこと1
集計に当たってまず、りんごがむ、りんごジュース、りんごそのまま、みかん+がむ・・・いちごそのままのように5列目(果物*食べ方)に9種類のラベルを作成したいです。
現状:mutateやfilter関数を使うことまでは分かったのですが、どう書いていけばよいのか分かりません。
コード:
データ全体=p2018
1列目(果物)=ku りんごは0、みかんは1のような形式です
2列目(食べ方)=ta がむは0、ジュースは1のような形式です。
5列目(果物*食べ方)=kt
p2018 %>%
dplyr::filter(p2018$ku == 0, p2018$ta == 0) %>%
dplyr::mutate(kt = 1)
p2018 %>%
dplyr::filter(p2018$ku == 0, p2018$ta == 1) %>%
dplyr::mutate(kt = 2)
・・・kt=9まで続く
現状このようなコードを書いた後、p2018と入力するとktの列があると出力されるのですが、csv形式で出力するとkt列が出力されていません。
☆教えて頂きたいこと2
5列目(果物*食べ方)の9種類が被験者(3列目)ごとに平均何点なのかをクロス集計表で算出したいです。
現状:クロス集計をして度数を算出する方法はいくつか見つけました。aggregate関数を使い、被験者ごとの平均得点を求めることは出来たのですが、そこに”果物*食べ方”をクロスさせる方法が分かりません。
aggregateではなくdplyr関数を使った方が良いというような記載も見つけ、どうすれば良いかわからなくなっています。
コード:
被験者名=name
得点=sc
aggregate(p2018$sc, by=list(p2018$name), FUN=mean, na.rm = TRUE)
とすると、被験者ごとの平均得点を求めることは出来たのですが、ここに5列目(果物*食べ方)の変数をどう追加すればよいのかが分かりません。
今までRはExcelで整理したデータを統計にかける程度で使っており、R上でデータ整理することは結構難しいと感じている次第です。
どなたか教えて頂くことは出来ませんでしょうか。
回答1件
あなたの回答
tips
プレビュー