我可以从字符串中获取列名吗?
Can I get column names from a string?
我想根据一些字符串组合 data.table 数据 table 的列,然后将它们从 table 中删除。
例如,我有一个数据 table dt
,其中包含列 price_t
和 price_t1
。我想创建一个定义为的新变量:
s <- 'log(price_t + price_t1 + 5)'
我希望有一个由 s
中的公式定义的新列,并且 price_t
和 price_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)
像这样?
我想根据一些字符串组合 data.table 数据 table 的列,然后将它们从 table 中删除。
例如,我有一个数据 table dt
,其中包含列 price_t
和 price_t1
。我想创建一个定义为的新变量:
s <- 'log(price_t + price_t1 + 5)'
我希望有一个由 s
中的公式定义的新列,并且 price_t
和 price_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)
像这样?