Могу ли я получить имена столбцов из строки? - PullRequest
1 голос
/ 25 марта 2020

Я хотел бы объединить столбцы таблицы данных 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)'

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Мы можем использовать 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 голосов
/ 25 марта 2020
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)

как это?

...