我有一个这样的数据框:
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
丢失时,我才会获得VarC
。{/ p>
我该如何解决这个问题?
谢谢。
答案 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
。