R - 缺少值和逻辑运算

时间:2013-11-25 22:31:38

标签: r if-statement boolean-logic na

我有一个这样的数据框:

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

我想创建第三个变量VarC,其中VarAVarB之间的值最高:

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

我知道这必须非常简单。我尝试使用ifelse函数,但只有当VarAVarB丢失时,我才会获得VarC。{/ p>

我该如何解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:5)

使用矢量化pmax并将na.rm设置为TRUE:

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

答案 1 :(得分: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行会发出警告,因为没有非缺失数据。如果需要,您可以使用-Inf覆盖NA