2016-11-24 4 views
0

この質問には既に回答がありましたが、私はそれを見つけることができません。R:グループ単位でテーブルのいくつかの列から手段とSDテーブルを生成

私はテーブルをRに持っています(以下の例はtxtからコピーしました。実際のテーブルはより多くのデータとNAを持っています) カラムc、e、fの平均とsdをcolumn b

私は平均とsdをグループごとに別々に計算することができます。

mean(c[b == 1], na.rm=TRUE) 
var(e[b == 2], na.rm=TRUE) 

私はまた、すべての列の平均値とSDを計算し、

library(data.table) 
new <- data.table(project2016) 

wide <- setnames(new[, sapply(.SD, function(x) list(mean = round(mean(x), 3), sd = round(sd(x), 3))), by = b], c("b", sapply(names(new)[-1], paste0, c(".mean", ".SD")))) 
wide 

結果とテーブルを生成する。しかし、私は必要なcolumsのためにそれを行うことができないですし、グループによって分離することができます。事前に

Thxを、 NIMBY

"id" "a" "b" "c" "d" "e"  "f" "g" 
    1 78 2 83 4 2.53 1.07 3 
    2 72 2 117 4 2.50 1.16 2 
    3 72 2 132 4 2.43 1.13 2 
    4 73 2 102 4 2.48 .81  2 
    5 73 2 114 4 2.33 1.13 2 
    6 73 2 88 43 2.13 .84  2 
    7 65 2 213 4 2.55 1.26 1 
    8 68 2 153 4 2.45 1.23 1 
+1

問題を再現できるデータを含めると便利です。私が見る限り、すべての行はここでb == 2です。何かを直接コピーしてコンソールに貼り付けることができれば最高です。 – timcdlucas

答えて

0
library(dplyr) 


# Some reproducible data 

d <- matrix(c(1, 78, 2, 83, 4, 2.53, 1.07, 3, 2, 72, 2, 117, 4, 2.50, 1.16, 2, 3, 72, 2, 132, 4, 2.43, 1.13, 2, 4, 73, 2, 102, 4, 2.48, .81, 2, 5, 73, 2, 114, 4, 2.33, 1.13, 2, 6, 73, 2, 88, 43, 2.13, .84, 2, 7, 65, 2, 213, 4, 2.55, 1.26, 1, 8, 68, 2, 153, 4, 2.45, 1.23, 1), 
     ncol = 8, byrow = TRUE) %>% 
     as.data.frame 

names(d) <- c("id", "a", "b", "c", "d", "e", "f", "g") 

# Your data only included one group in column b 
d$b[5:8] <- 1 

# Calc mean and sd for the 3 columns, grouped by b 
d %>% 
    group_by(b) %>% 
    summarise(mean_c = mean(c), sd_c = sd(c), 
         mean_e = mean(e), sd_e = sd(e), 
         mean_f = mean(f), sd_f = sd(f)) 

d 

これは

# A tibble: 2 × 7 
     b mean_c  sd_c mean_e  sd_e mean_f  sd_f 
    <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> 
1  1 142.0 54.35071 2.365 0.18064699 1.1150 0.1915724 
2  2 108.5 20.95233 2.485 0.04203173 1.0425 0.1594522 

を生み出すもそれを行うには非dplyr方法もあるかもしれません。

+0

お返事ありがとうございます。 私は後悔して、Rで動作させることができませんでした。私は次のメッセージを受け取ります。要約のエラー_(.data、.dots = lazyeval :: lazy_dots(...)):引数 ".data"がありません。デフォルトはありません 一方、私はデータを分割する方法を考え出しました。 (fBasics)basicStats(b_c)[c( "nobs"、 "NA"、 "Mean"、 "Stdev"、 "Variance"、 "1 Quartile"、 "3 Quartile")]] 私は外出先でいくつか余分な統計情報を取得しました;-)それはグループ要素ごとに必然的なデータであり、すべてのテーブルではありませんが、今は十分です。 – nimby

関連する問題