2017-01-31 3 views
1

var2の平均と標準誤差を持つdata.frameがあります。data.frameを "wide"から "long"形式でプロットして平均と標準誤差をプロットする

original_df <- data.frame(group_dummy_code = c(0, 1), 
      var1_mean = c(1.5, 2.5), 
      var1_se = c(.025, .05), 
      var2_mean = c(3.5, 4.5), 
      var2_se = c(.075, .1)) 

> original_df 
    group_dummy_code var1_mean var1_se var2_mean var2_se 
1    0  1.5 0.025  3.5 0.075 
2    1  2.5 0.050  4.5 0.100 

私はプロットするためにdesired_dfdata.frameを変更するtidyr機能gather()を使用しようとしている:このdata.frame

original_dfは、二つのグループのそれぞれのデータから、これらの統計を作成するから来ました2つの変数の平均と標準エラー:

desired_df <- data.frame(group_dummy_code = c(0, 1, 0, 1), 
         key = c("var1", "var1", "var2", "var2"), 
         val_mean = c(1.5, 2.5, 3.5, 4.5), 
         val_se = c(.025, .05, .075, .1)) 

> desired_df 
    group_dummy_code key val_mean val_se 
1    0 var1  1.5 0.025 
2    1 var1  2.5 0.050 
3    0 var2  3.5 0.075 
4    1 var2  4.5 0.100 

私は次のように二回gather()に試してみました:

df %>% 
    gather(mean_key, mean_val, -group_dummy_code, -contains("se")) %>% 
    gather(se_key, se_val, -group_dummy_code, -mean_key, -mean_val) 

しかし、これは(それぞれの意味に対して複数の標準誤差で、特に)あまりにも多くの行になり:

group_dummy_code mean_key mean_val se_key se_val 
1    0 var1_mean  1.5 var1_se 0.025 
2    1 var1_mean  2.5 var1_se 0.050 
3    0 var2_mean  3.5 var1_se 0.025 
4    1 var2_mean  4.5 var1_se 0.050 
5    0 var1_mean  1.5 var2_se 0.075 
6    1 var1_mean  2.5 var2_se 0.100 
7    0 var2_mean  3.5 var2_se 0.075 
8    1 var2_mean  4.5 var2_se 0.100 

これは特にの統計を作成した後、かなり一般的な処理ステップのように思えますいくつかの変数の平均と標準偏差がありますが、平均で1回、標準誤差変数で1回の2回です。gather()を2回送信することは良いアプローチのようには思えません。

tidyr(またはdplyrまたは別のパッケージ)を使用すると、original_dfからdesired_dfをどのように作成できますか?

+0

も参照[測定の複数のセットをリシェイプ列(ワイドフォーマット)を単一のカラム(ロングフォーマット)に変換](http://stackoverflow.com/questions/12466493/reshaping-multiple-sets-of-measurement-columns-wide-format-into-single-columns) – Henrik

答えて

1

tidyr::gather()あなたはtidyrに固執したい場合、あなたはgather-separate-spreadでそれを行うことができ、多値列を持つデータフレームを再構築するための機能を提供していません:

library(tidyr) 
original_df %>% 
    gather(var_stats, value, -group_dummy_code) %>% 
    separate(var_stats, into = c("var", "stats")) %>% 
    spread(stats, value) 

# group_dummy_code var mean se 
#1    0 var1 1.5 0.025 
#2    0 var2 3.5 0.075 
#3    1 var1 2.5 0.050 
#4    1 var2 4.5 0.100 
関連する問題