我有以下数据框:
id<-c(1,2,3,4)
x<-c(0,2,1,0)
A<-c(1,3,4,3)
df<-data.frame(id,x,A)
现在我想创建一个名为value
的变量,如果x> 0,value
每个id
将等于A + 1 / x,如果x = 0,值等于A.
为此,我打字了
value <- df$A + as.numeric(df$x > 0)*(1/df$x)
我期望的是一个矢量a:
[1] 1 3.5 5.0 3
然而,输入上述命令我得到的是:
[1] NaN 3.5 5.0 NaN
我想知道是否有人可以帮我解决这个问题。 提前谢谢!
答案 0 :(得分:4)
我认为在这种情况下使用函数ifelse
会更简单:
ifelse(df$x>0, df$A + (1/df$x), df$A)
[1] 1.0 3.5 5.0 3.0
有关详细信息,请参阅?ifelse
。
使用您尝试应用的命令,虽然as.numeric(df$x>0)
确实给你一个1和0的向量(所以这是一个好主意),但它没有改变1/df$x
的事实当NaN
等于0时({1}}是df$x
,因为你不能除以0。