我正在寻找一种使用 dplyr 在列上合并矢量化操作的简洁方法。
基本上,有一个简单的 df 如下:
library(dplyr)
df <- data.frame("X" = runif(1:10),
"Y" = runif(1:10), "Z" = runif(1:10)) %>%
tbl_df()
我现在希望应用以下矢量化公式:
Formula <- "X / Y + lag(Z)"
当然,以下内容将不起作用,因为它正在寻找列“X/Y + lag(Z)”:
df %>% mutate(Result := !!sym(Formula))
任何人都可以建议一种简单的方法,直接在列的管道中应用向量中的公式来实现:
df %>% mutate(Result = X/Y+lag(Z))
最佳答案
这是您要找的吗?
set.seed(1)
df <- data.frame("X" = runif(1:10),
"Y" = runif(1:10), "Z" = runif(1:10)) %>%
tbl_df()
Formula <- "X / Y + lag(Z)"
df <- df %>% mutate(Result = eval(parse(text = Formula)))
X Y Z Result
<dbl> <dbl> <dbl> <dbl>
1 0.153 0.0158 0.527 NA
2 0.322 0.231 0.327 1.93
3 0.479 0.0958 0.365 5.33
4 0.764 0.537 0.105 1.79
5 0.180 0.223 0.0243 0.913
6 0.178 0.538 0.975 0.355
7 0.869 0.820 0.845 2.03
8 0.356 0.263 0.0628 2.20
9 0.0399 0.710 0.968 0.119
10 0.863 0.422 0.825 3.02
解析
未计算的表达式,然后评估
评估它。
关于r - dplyr 中的向量化列运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55335311/