R-缺少值和逻辑操作

R-缺少值和逻辑操作,r,if-statement,boolean-logic,na,R,If Statement,Boolean Logic,Na,我有这样一个数据框: ID VarA VarB 001 5 2 002 4 003 6 004 005 3 5 我想创建第三个变量VarC,其最大值介于VarA和VarB之间: ID VarA VarB VarC 001 5 2 5 002 4 4 003 6 6 004 005 3

我有这样一个数据框:

ID    VarA   VarB 
001   5      2
002          4
003   6
004    
005   3      5
我想创建第三个变量
VarC
,其最大值介于
VarA
VarB
之间:

ID    VarA   VarB   VarC
001   5      2      5
002          4      4
003   6             6
004                 
005   3      5      5
我知道这必须非常简单。我尝试使用
ifelse
函数,但我仅在
VarA
VarB
缺失时获得该功能

我怎样才能解决这个问题

谢谢。

您只需与参数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
>myData myData$VarC myData
ID VarA VarB VarC
1  1    5    2    5
2 NA 4
3 3 6 NA 6
4 NA-Inf
5  5    3    5    5
请注意,第4行抛出了一个警告,因为没有未丢失的数据。如果需要,可以使用
NA
覆盖
-Inf

您只需要与参数一起使用
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
>myData myData$VarC myData
ID VarA VarB VarC
1  1    5    2    5
2 NA 4
3 3 6 NA 6
4 NA-Inf
5  5    3    5    5

请注意,第4行抛出了一个警告,因为没有未丢失的数据。如果需要,可以使用
NA
覆盖
-Inf

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

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

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

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