質問: TRUE) とすると、被験者ごとの平均得点を求めることは出来たのですが、ここに5列目(果物*食べ方)の変数をどう追加すればよいのかが分かりません。 今までRはExcelで整理したデータを統計にかける程度で使っており、R上でデータ整理することは結構難しいと感じている次第です。 どなたか教えて頂くことは出来ませんでしょうか。
回答: とりあえず一番目の質問について。考え方は、まず特定の1行に注目し、既存の列データから新しい列を合成することを考えます。ここでは単純にpaste関数を使えばいいでしょう。excelのconcatenate関数に似た働きをします。paste("a","b")は"a b"を返します。 これが確認できたら、データフレームの列全体を対象とした式を組みます。Rの世界では、df[,1]あるいはdf[,"ta"]あるいはdf$taの形式で、「1列目」あるいは「taと名付けられた列」を指定できます。そして、あたかも単値同士の演算を行うかのようなスタイルで、データの集合体(ベクトル)を相手にした演算を表現できます。これを利用してデータフレームに新しい列を簡単に追加定義できます。 次に2番めですが、aggregate関数を使うのが簡単でしょう。引数として、集計したい列(群)・識別したい条件(群)・関数を指定します。また、by=、fun=などパラメータ名を明示した指定も可能で、この場合はパラメータの順序が前後しても構いません。 dplyrはうまく使えばデータの流れがわかりやすくなって有用ですが、最初はとりあえず忘れていいです。dplyrがなければできない処理というのは基本的にありません。まずはRでのデータ取り回しの基本を理解しないと、かえって混乱すると思います。 まとめると、だいたい次のようなコードになると思います。 ``` #とりあえずテストデータをでっちあげる。 testdf <- read.table(text=" ku ta person score 1 1 Nishizumi 10 1 1 Isuzu 25 1 0 Reizei 30 0 1 Takebe 22 0 1 Akiyama 33 0 0 Nishizumi 23 1 0 Reizei 44 0 0 Isuzu 32 1 1 Nishizumi 45 0 1 Isuzu 69 1 0 Reizei 70 0 1 Takebe 72 1 1 Akiyama 74 0 0 Akiyama 76 1 0 Takebe 77 0 0 Nishizumi 80", header=T, stringsAsFactors=F) # 5列目(kuta)追加 testdf$kuta <- paste(testdf$ku, testdf$ta) # カテゴリごとの平均を出す r <- stats::aggregate( testdf$score, # testdfのうちscore列だけを対象にする by = list(testdf$kuta, testdf$person), # kutaとperson列でカテゴライズ FUN = mean ) print(r) # 結果をtab区切りファイルに書き出す write.table(r, sep="\t", file="out.txt") ```