0

我有一个数据框,其中三列代表三个重复测量:

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    

我想通过基于以下内容计算三个测量值的行平均值(或中位数)来创建一个新变量:

a) 如果 col 1 和 col 2 之间的差异 >0.4 并且 col 3 中有一个值,则计算行中位数。b) 如果 col 1 和 col 2 之间的差异 >0.4 并且 col 3 中没有值打印“NULL” c) 在所有其他情况下(即 col 1 和 2 之间的差异 <0.4)计算行平均值。

我尝试了以下方法:

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

如果您的列名称是Height1etc,那么您需要更改X1Height1etc。

于 2013-10-14T17:02:47.013 回答