我想根据一些字符串组合data.table数据表的列,然后将它们从表中删除。
例如,我有一个数据表dt
,其中包含列price_t
和price_t1
。我想创建一个新的变量,定义为:
s <- 'log(price_t + price_t1 + 5)'
我希望有一个新列,该列由s
中的公式定义,并且price_t
和price_t1
列将消失。
要删除的变量仅存储在字符串中,因此我必须从s
中解析出需要删除的内容。该字符串将包含环境中存在的函数,因此标准函数(例如log
)或用户定义的函数,数据中的列名。表和常量。
更多示例
s1 <- 'price_t + 5'
RegCoef <- function(x, y) {
m <- lm(y ~ x)
return(coef(m)[2])
}
s2 <- 'RegCoef(price_t, price_t1)'
我们可以使用eval(parse
library(data.table)
library(stringr)
nm1 <- str_extract_all(s, str_c("\\b(", str_c(names(dt),
collapse="|"), ")\\b"))[[1]]
nm1
#[1] "price_t" "price_t1"
dt[, s := eval(parse(text = s))][, (nm1) := NULL][]
dt<-data.table(price_t=c(1,2,3),price_t1=c(3,2,1))
dt<-data.table(price_t=c(1,2,3),price_t1=c(3,2,1))
dt$s<-log(dt$price_t+dt$price_t1 + 5)
喜欢这样?