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)

私が期待するのは、次のベクトルです。

[1] 1 3.5 5.0 3

ただし、上記のコマンドを入力すると、次のようになります。

 [1] NaN 3.5 5.0 NaN  

誰かがこの問題で私を助けることができるかどうか疑問に思います。前もって感謝します!

4

1 に答える 1

4

I think it would be simpler to use function ifelse in this case:

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

See ?ifelse for more details.

With the command you were trying to apply, although as.numeric(df$x>0) was indeed giving you a vector of 1 and 0 (so it was a good idea), it didn't change the fact that 1/df$x was an NaN when df$x was equal to 0 (since you can not divide by 0).

于 2012-07-30T09:35:00.217 に答える