评估数据框列的表达式
Evaluate an expression to data frame columns
我想评估给定数据框的多个表达式和 return 具有转换列的数据框。我以前做的是:
library(dplyr)
df <- data.frame(A = 1:5, B = 6:10)
expr <- c("A+B", "A-B")
names(expr) <- c("V1", "V2")
df %>% transmute_(.dots = lazyeval::all_dots(expr))
此代码将 return 所需的输出:
V1 V2
1 7 -5
2 9 -5
3 11 -5
4 13 -5
5 15 -5
但是,transmute_ 和 lazyeval 都已弃用,想知道是否有更好的方法来做到这一点?真实数据包含许多表达式和列,因此也在寻找更省时的方法。
这种方式有点绕,但也许适合你的目的:
library(tidyverse)
expr %>% map(str2expression) %>% map(eval, envir = df) %>% as.data.frame()
# V1 V2
#1 7 -5
#2 9 -5
#3 11 -5
#4 13 -5
#5 15 -5
#Check
identical(df %>% transmute_(.dots = lazyeval::all_dots(expr)),
expr %>% map(str2expression) %>%
map(eval, envir = df) %>%
as.data.frame()
)
# [1] TRUE
我想评估给定数据框的多个表达式和 return 具有转换列的数据框。我以前做的是:
library(dplyr)
df <- data.frame(A = 1:5, B = 6:10)
expr <- c("A+B", "A-B")
names(expr) <- c("V1", "V2")
df %>% transmute_(.dots = lazyeval::all_dots(expr))
此代码将 return 所需的输出:
V1 V2
1 7 -5
2 9 -5
3 11 -5
4 13 -5
5 15 -5
但是,transmute_ 和 lazyeval 都已弃用,想知道是否有更好的方法来做到这一点?真实数据包含许多表达式和列,因此也在寻找更省时的方法。
这种方式有点绕,但也许适合你的目的:
library(tidyverse)
expr %>% map(str2expression) %>% map(eval, envir = df) %>% as.data.frame()
# V1 V2
#1 7 -5
#2 9 -5
#3 11 -5
#4 13 -5
#5 15 -5
#Check
identical(df %>% transmute_(.dots = lazyeval::all_dots(expr)),
expr %>% map(str2expression) %>%
map(eval, envir = df) %>%
as.data.frame()
)
# [1] TRUE