我可以从字符串中获取列名吗?

Can I get column names from a string?

我想根据一些字符串组合 data.table 数据 table 的列,然后将它们从 table 中删除。

例如,我有一个数据 table dt,其中包含列 price_tprice_t1。我想创建一个定义为的新变量:

s <- 'log(price_t + price_t1 + 5)' 

我希望有一个由 s 中的公式定义的新列,并且 price_tprice_t1 列将消失。

要删除的变量只存储在字符串中,所以我必须从s中解析出需要删除的内容。该字符串将包含环境中存在的函数,因此可以是 log 等标准函数,也可以是用户定义的函数,数据中的列名。 table,和常量。

更多示例

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)

像这样?