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

问题描述 投票:0回答:2

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

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

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

我希望有一个新列,该列由s中的公式定义,并且price_tprice_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)'
r data.table evaluation
2个回答
1
投票

我们可以使用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))

0
投票
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)

喜欢这样?

© www.soinside.com 2019 - 2024. All rights reserved.