0

3 つの繰り返し測定を表す 3 つの列を持つデータ フレームがあります。

IDPupil    1       2       3
1        150.5   151.0   150.6    
2        156.3   156.5            
3        145.7   146.0            
4        151.4   151.6            
5        150.0   149.5   150.4    

以下に基づいて、3 つの測定値の行平均 (または中央値) を計算して、新しい変数を作成したいと思います。

a) 列 1 と列 2 の差が >0.4 で、列 3 に値がある場合、行の中央値を計算します。b) 列 1 と列 2 の差が >0.4 で、列 3 に値がない場合、"NULL" を出力します。

私は次のことを試しました:

Hdiff= hwdata$Height1 - hwdata$Height2
 Hdiff2 = abs(Hdiff)
 Hdiff2

MeanH = if(Hdiff2 > 0.4 && hwdata$Height3 > 0) {
rowMedians(hwdata[, c("Height1", "Height2", "Height3")], na.rm = TRUE)

} else if(Hdiff2 > 0.4 & hwdata$Height3 == 0)
MeanH = "NULL"

}else rowMeans (hwdata [, c("Height1", "Height2", "Height3")], na.rm = TRUE)
{

エラーが発生します:

'Error: could not find function "rowMedians"'

'Error: unexpected '}' in "}"'

R体験=1週間。これを行うためのより節約的な方法はありますか?

4

1 に答える 1

1

あなたが提供したデータを使用すると、これは機能します:

dt<-read.table(text="IDPupil    1       2       3
1        150.5   151.0   150.6    
2        156.3   156.5   NA         
3        145.7   146.0   NA         
4        151.4   151.6   NA         
5        150.0   149.5   150.4",h=T)
> ifelse(abs(dt$X1-dt$X2)<0.4,rowMeans(dt[,-1],na.rm=T),apply(dt[,-1],1,median))
[1] 150.60 156.40 145.85 151.50 150.00

列名が etc の場合は、etcに変更するHeight1必要があります。X1Height1

于 2013-10-14T17:02:47.013 に答える