1

我有以下数据框:

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  

我想知道是否有人可以帮助我解决这个问题。提前致谢!

4

1 回答 1

4

我认为ifelse在这种情况下使用函数会更简单:

ifelse(df$x>0, df$A + (1/df$x), df$A)
[1] 1.0 3.5 5.0 3.0

有关?ifelse更多详细信息,请参阅。

使用您尝试应用的命令,虽然确实给了您一个 1 和 0 的向量(所以这是个好主意),但它并没有改变when等于 0的as.numeric(df$x>0)事实(因为您不能除0)。1/df$xNaNdf$x

于 2012-07-30T09:35:00.217 回答