web-dev-qa-db-ja.com

dplyrを使用して2つの列の平均を取得するにはどうすればよいですか?

dplyrを使用してデータテーブルの2つの列の平均を取得する方法は?たとえば、私のデータが以下のような場合:

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

各行の列Aと列Bの平均である新しい列「Avg」を作成したいと思います。

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

しかし、このコードでは正しい結果が得られません。これを行う方法?どうもありがとうございました。

8
Carter

これを実現するために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
14
Stedy

どうですか

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

meanはベクトル化されていません。すべての入力を単一の値に折りたたみます。 cbind()で行列を作成する場合は、rowMeansを使用してトリックを実行できます。

12
MrFlick

初期データセットは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
1
akrun