2015-12-09 16 views
5

dplyrを使用してデータテーブルの2つの列の平均を取得するにはどうすればよいですか?例えば、以下のような場合、私のデータ場合:dplyrを使用して2列の平均を取得するにはどうすればよいですか?

dt %>% mutate(Avg=mean(c(A, B), na.rm=T)) 

しかし、このコード:

dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 

私は、各行の列AとBの平均値である新しい列「平均」を作成したいです正しい結果が得られません。これを行う方法?どうもありがとうございました。

dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T)) 

mean

についてはベクトル化されていませんどのように

+1

を使用することができますあなたは本当に'dplyr'が必要ですか? –

+0

平均計算はすべて私の計算の一歩です。他の計算にはdplyrを使用する必要があります。 – Carter

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

答えて

11

あなたがこれを達成するためにdplyr使用したい場合は、私は機能rowwise()を使用することをお勧めします:

R> library(dplyr) 
    R> dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 
    R> j <- dt %>% rowwise() %>% mutate(Avg=mean(c(A, B), na.rm=T)) 
    R> j 
Source: local data frame [5 x 3] 
Groups: <by row> 

     A  B Avg 
    (int) (dbl) (dbl) 
1  1  1 1.0 
2  2  4 3.0 
3  3 NA 3.0 
4  4  6 5.0 
5  5  8 6.5 
6

。すべての入力を単一の値に縮小します。 cbind()で行列を作成する場合は、rowMeansを使用してトリックを実行できます。

+0

これは私にとって唯一の実用的な解決策でした。 –

1

初期データセットがdata.tableであるように、我々はdata.table方法

dt[, Avg:= mean(unlist(.SD), na.rm=TRUE) , .1:nrow(dt)] 
dt 
# A B Avg 
#1: 1 1 1.0 
#2: 2 4 3.0 
#3: 3 NA 3.0 
#4: 4 6 5.0 
#5: 5 8 6.5 
関連する問題