【发布时间】:2018-02-11 09:40:53
【问题描述】:
我想知道使用dplyr 是否可以进行以下计算。
x <- data.frame(
yr = c(2012, 2013, 2014, 2015, 2016),
rate = c(1.1, 1.2, 0.8, -0.4, 0.5)
) %>% arrange(desc(yr))
这就是我想要计算 y 的方式:
y[i] = ifelse(yr == max(yr), 100,
100 * y[i-1]/(100 + rate[i-1]))
如果我尝试这样的事情:
x %>%
mutate(
y = ifelse(
yr == max(yr), 100,
100 * lag(y) / (100 + lag(rate))
)
)
它返回以下错误:Evaluation error: object 'y' not found.
如标题所示,我想要一个管道内的 dplyr 解决方案,而不使用像 zoo 或 data.table 这样的包,主要是因为它在不同数据库中的 SQL 可翻译性。
这可能吗?
【问题讨论】:
-
在
ifelse中,'y' 尚未创建。如果'y'的值应该基于之前的值,那么你可能需要accumulate。不清楚accumulate能否翻译 -
我确实理解了错误消息,但不清楚如何解决这个问题。你说得对 - 很遗憾,
accumulate似乎没有翻译。