2013-11-25 151 views
1

我有这样一个数据帧:的R - 缺失值和逻辑运算

ID VarA VarB 
001 5  2 
002   4 
003 6 
004  
005 3  5 

VarAVarB之间创建一个第三可变VarC具有最高值:

ID VarA VarB VarC 
001 5  2  5 
002   4  4 
003 6    6 
004     
005 3  5  5 

我知道这一点非常简单。我尝试使用ifelse函数,但我只获得当VarAVarB丢失VarC丢失。

我该如何解决问题?

谢谢。

回答

5

使用矢量pmax和设置na.rm为TRUE:

with(myData,pmax(VarA,VarB,na.rm=TRUE)) 
1] 5 4 6 NA 5 
+0

美丽,谢谢 – corrado

1

你只需要使用?max和参数na.rm=TRUE

> myData <- read.table(text="ID VarA VarB 
+ 001 5  2 
+ 002 NA  4 
+ 003 6  NA 
+ 004 NA  NA 
+ 005 3  5", header=TRUE) 
> myData$VarC <- apply(X=myData[,-1], MARGIN=1, FUN=max, na.rm=TRUE) 
Warning message: 
In FUN(newX[, i], ...) : no non-missing arguments to max; returning -Inf 
> myData 
    ID VarA VarB VarC 
1 1 5 2 5 
2 2 NA 4 4 
3 3 6 NA 6 
4 4 NA NA -Inf 
5 5 3 5 5 

注意,4号线,因为没有不丢失数据抛出一个警告。如果需要,您可以用NA覆盖-Inf