RでNA値を持つ行の平均を計算する 質問する

RでNA値を持つ行の平均を計算する 質問する

本当に簡単な R の質問があるのですが、適切な解決策が見つからないようです。次のデータ フレームがあるとします。

groupid<-rep(1:5, each=3)
names<-rep(c("Bill", "Jim", "Sarah", "Mike", "Jennifer"),3)
test1<-rep(c(90, 70, 90, NA, 100),3)
test2<-rep(c(80, NA, 92, 80, 65), 3)
testscores<-data.frame(groupid, names, test1, test2)

groupid    names test1 test2

1        1     Bill    90    80
2        1      Jim    70    NA
3        1    Sarah    90    92
4        1     Mike    NA    80
5        1 Jennifer   100    65
6        2     Bill    90    80
7        2      Jim    70    NA
8        2    Sarah    90    92
9        2     Mike    NA    80
10       2 Jennifer   100    65
11       3     Bill    90    80
12       3      Jim    70    NA
13       3    Sarah    90    92
14       3     Mike    NA    80
15       3 Jennifer   100    65

NA 値を無視して、各テストの行全体の平均 (データ フレームに列を追加) を取得することに興味があります。たとえば、「Jim」の平均値は 70 で、「Mike」の平均値は 80 になります。その他はすべて通常の平均になります。

plyr パッケージの transform を使用しようとしましたが、NA の問題には対応していないようです。

ベストアンサー1

testscores$testMean <- rowMeans(testscores[,3:4], na.rm=TRUE)
> testscores
   groupid    names test1 test2 testMean
1        1     Bill    90    80     85.0
2        1      Jim    70    NA     70.0
3        1    Sarah    90    92     91.0
4        2     Mike    NA    80     80.0
5        2 Jennifer   100    65     82.5
6        2     Bill    90    80     85.0
7        3      Jim    70    NA     70.0
8        3    Sarah    90    92     91.0
9        3     Mike    NA    80     80.0
10       4 Jennifer   100    65     82.5
11       4     Bill    90    80     85.0
12       4      Jim    70    NA     70.0
13       5    Sarah    90    92     91.0
14       5     Mike    NA    80     80.0
15       5 Jennifer   100    65     82.5

おすすめ記事