質問: 下記の計算結果を、txtかcsvでファイルに出力したく、ご教示いただけませんでしょうか。 ``` #CSVファイルを読み込む a <- read.csv("testfile.csv") #列Aを表示 print(a$A) # あるいはprint(a[, 'A']) print(a$B) print(a$C) #A列の統計値を求める #平均 mean(a$A) #中央値 median(a$A) #最頻値 names(which.max(table(a$A))) #B列の統計値を求める #平均 mean(a$B) #中央値 median(a$B) #最頻値 names(which.max(table(a$B))) #C列の統計値を求める #平均 mean(a$C) #中央値 median(a$C) #最頻値 names(which.max(table(a$C))) #計算した統計値を結果をデータに保存する ??? ``` 結果(イメージ。フォーマットは違っても可) ``` ,平均,中央値,最頻値 A,結果, 結果, 結果 B,結果, 結果, 結果 C,結果, 結果, 結果 ```
回答: 例えばこんな感じでしょうか。 ``` # 最頻値を返す(同率1位の場合の対応はしていない) my_mode <- function(x) { names(which.max(table(x))) # as.integer(names(which.max(table(x)))) とすると整数として返します } # 同じデータ構造に異なる関数を繰り返し適用する目的で定義しています methods <- c('mean', 'median', 'my_mode') a <- read.csv('testfile.csv') # forでも書けますがapply系の関数を覚えると便利かと思います result <- sapply(methods, function(method) { sapply(a, function(column) { # 動的な関数呼び出しを行うものです。詳しくは?do.callなどで。。 do.call(method, list(column)) }) }) # ヘッダを変更します。 colnames(result) <- c('平均', '中央値', '最頻値') write.csv(result, file='result.csv') ``` 以下、余談です。 ご存じかもしれませんが、`R`はわからない関数などの頭に`?`を付けると、ヘルプを表示してくれます。たとえば`sapply`がわからない場合は`?sapply`と`R`のコンソールに尋ねることができます。 `R`の基本文法についてはRjpWiki - RjpWikiなどを参考にされても良いかもしれません。英語ということでとっつきにくいかもしれませんがR for cats · and cat lovers (日本で言う「猫でもわかる」系チュートリアル)も個人的には面白くて好きです。