我正在尝试mutate
使用if_else
对另一个变量的值有条件地使用新变量,但if_else
坚持计算所有值,然后有条件地替换其中的值最终的矢量。
如果无法为其他情况计算导致某些情况的最终值的函数,则此行为会出现问题:
df_foo = data_frame(
rate = sample(c(0, 0.1), size = 100, replace = TRUE),
pmt = 1000,
nper = 10
)
df_foo %>%
mutate(
if_else(
rate > 0,
optiRum::PV(rate = rate, pmt = -pmt, nper = nper),
0
)
)
当条件为TRUE
时,有没有办法只计算TRUE
值?
答案 0 :(得分:0)
这不是if_else
特有的问题,基本版本ifelse
的行为相同。在ifelse
的帮助文件中,我们可以阅读:
如果
yes
或no
太短,则会回收其元素。yes
将是。{ 评估当且仅当test
的任何元素是真的,并且类似地no
。
在许多情况下ifelse
使用不合适,并且其中一个条件中出现错误警告的情况是一个。
做你想做的事情(没有dplyr
)的解决方案是:
df_foo$x <- 0
df_foo$x[df_foo$rate > 0] <- with(df_foo[df_foo$rate > 0, ], optiRum::PV(rate, nper, -pmt))