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))
しかし、このコードでは正しい結果が得られません。これを行う方法?どうもありがとうございました。
これを実現するために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
どうですか
_dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T))
_
mean
はベクトル化されていません。すべての入力を単一の値に折りたたみます。 cbind()
で行列を作成する場合は、rowMeans
を使用してトリックを実行できます。
初期データセットは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