2017-02-20 11 views
-1

異なる種(カラム1)の複数のカテゴリ(行1の異なる測定値)のいくつかの要約統計量(平均、sd、範囲、サンプルサイズ)を同時に生成し、「write .csv()を1つのデータファイルにまとめることができます。一度に1つの種を実行すれば十分ですが、すべての種のすべてのデータを1つの.csvファイルにまとめてまとめて統計情報を一度に生成したいと考えています。 "要約統計量R

+4

ようこそStackOverflow! [質問する方法](http://stackoverflow.com/help/how-to-ask)を読み、[再現可能な例を作る方法]をチェックしてください(http://stackoverflow.com/questions/ 5963269/how-to-make-a-great-r-reproducible-example)を参照してください。次に、あなたの質問を編集して戻って、試したことを示すための例といくつかのコードと、あなたの質問を明確にするのに役立つ何かを追加することができます。 – Jota

答えて

1

私はあなたが話していることを知っています。平均、標準偏差、範囲、およびサンプルサイズを取得したいとします。 Rは、データセット内で数値が小さく、カンマが一番大きい関数の範囲を与えるため、問題が発生しています。魔法はかっこいいです()。私はtranspose t()とas.matrixを使ってデータフレームに入れるのを簡単にしました。

とにかく、内蔵の虹彩データセットを見てください。

data(iris) 

私は、唯一のがく片の長さに関して、これらすべてのためにあなたの平均、SD、およびサンプルサイズを与えるrbindでデータフレームの列にすべての値を書き、そして最後に行に名前を付けるつもりですrownames()。

はちょうどこの操作を行います。

mean_sepal_length = t(as.matrix(tapply(iris$Sepal.Length, iris$Species, mean))) 
mean_sepal_length 

sd_sepal_length = t(as.matrix(tapply(iris$Sepal.Length, iris$Species, FUN = sd))) 
sd_sepal_length 


sample_size_sepal_length = t(as.matrix(tapply(iris$Sepal.Length, iris$Species, FUN = length))) 
sample_size_sepal_length 


df_sepal_length <- data.frame(mean_sepal_length) 
df_sepal_length 

View(df_sepal_length) 

df_sepal_length = rbind(df_sepal_length, sd_sepal_length) 

df_sepal_length = rbind(df_sepal_length, sample_size_sepal_length) 

rownames(df_sepal_length) <- c("Mean_sepal_length", "sd_sepal_length", "size_sepal_length") 

write.csv(df_sepal_length, "C:/Users/me/Documents/tapply_miracle.csv") 
+0

ありがとうございました。私は各種のすべてのデータを別々に得ることができますが、同じデータマトリックス(.csvファイル)に複数の種のデータを必要とする場合は、個々の種にマトリックスを切り詰めるのではなく、データ行列は別々に実行されます。そのためのスクリプトはありますか? –

0

私は一日で戻った私の答えを考えていた、と私はtapply機能はINDEX変数を受け入れることができますことに気づいたとき、それは改善の余地があると思いましたリストとして。私の例では、tapplyは1つの要素を分類できることを認識していましたが、複数の要素を指定できます。トリックは)関数は、(溶融使用して、それをより読みやすくなり、長い形式に広いから、虹彩データフレームを溶融し、リストの引数でtapplyすることです:

 > install.packages("reshape2") 
     > library(reshape2) 

    # I used melt to restyle the iris dataframe from wide to long turning the many columns into rows with less columns, and I coerced the iris dataset back to a dataframe. 

     > iris_melt <- data.frame(melt(data = iris, id = "Species", variable.name = "iris_factors", value.name = "iris_dimensions_cm")) 


    > head(iris_melt) 
    Species iris_factors iris_dimensions_cm 
1 setosa Sepal.Length    5.1 
2 setosa Sepal.Length    4.9 
3 setosa Sepal.Length    4.7 
4 setosa Sepal.Length    4.6 
5 setosa Sepal.Length    5.0 
6 setosa Sepal.Length    5.4 

ここでは、すべての平均の花の大きさを取得します虹彩の要因:葉の長さ、葉の幅、花弁の長さ、&すべての種(setosa、virginica、versicolor)にわたる花弁の幅。

> tapply(X = iris_melt$iris_dimensions_cm, INDEX = list(iris_melt$iris_factors, iris_melt$Species), FUN = mean) 
      setosa versicolor virginica 
Sepal.Length 5.006  5.936  6.588 
Sepal.Width 3.428  2.770  2.974 
Petal.Length 1.462  4.260  5.552 
Petal.Width 0.246  1.326  2.026 

行き方:私たちはインデックス付きリストに要素の順序を変更する場合は

> tapply(X = iris_melt$iris_dimensions_cm, INDEX = list(iris_melt$Species, iris_melt$iris_factors), FUN = mean) 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
setosa   5.006  3.428  1.462  0.246 
versicolor  5.936  2.770  4.260  1.326 
virginica   6.588  2.974  5.552  2.026 

、我々は、行と列を反転させることで、わずかに差形式で私たちに提示同じ情報を得ることができます標準偏差は簡単です。 FUN引数を変更するだけです:

> tapply(X = iris_melt$iris_dimensions_cm, INDEX = list(iris_melt$iris_factors, iris_melt$Species), FUN = sd) 
       setosa versicolor virginica 
Sepal.Length 0.3524897 0.5161711 0.6358796 
Sepal.Width 0.3790644 0.3137983 0.3224966 
Petal.Length 0.1736640 0.4699110 0.5518947 
Petal.Width 0.1053856 0.1977527 0.2746501 

これで基本的にRbindを使う必要はありません。

関連する問題