r - dplyr 中的向量化列运算

标签 r dplyr tidyverse

我正在寻找一种使用 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/

相关文章:

r - Data.frame 使用来自另一个 data.frame(如 Excel "criteria table")的条件转换数据

r - 在引用类中实例化引用类 - lock() 和不变性的问题

r - R 与 RNetCDF 的结果不一致 - 为什么?

python/pandas 相当于 dplyr 1.0.0 summarize(across())

r - 使用其他列中的值跨多个列进行条件变异 - 在 tidyverse 中寻找有效的解决方案

r - 使用行列索引对从数据框中的不同列中选择值的 Tidyverse 方法

r - 如何防止我的打包函数被 ls() 列出?

r - 在 Shiny 应用程序中创建动态选项卡集会在 ggploty 上出现错误

r - 将加权随机变量分配给 R 数据框中的新列

R:带有粘贴的引用列名称