Ссылка на столбец data.table по шаблону

Я пытаюсь построить несколько таблиц данных, которые используют шаблон имени столбца, используя функцию. Ниже приведены два примера таблиц:

dt1 = data.table(date=seq(as.Date("2015/06/20"), as.Date("2015/06/29"), by= "day"),
             ppp_min = rnorm(10), ppp_mean = rnorm(10), ppp_max = rnorm(10))
dt2 = data.table(date=seq(as.Date("2015/06/20"), as.Date("2015/06/29"), by= "day"),
             qqq_min = rnorm(10), qqq_mean = rnorm(10), qqq_max = rnorm(10))

И пример функции графика:

plt <- function(dt,code) {
min <- paste(code, '_min',sep='')
plot(dt$date, dt[,get(min)])
}
plt(dt1,ppp)
plt(dt2,qqq)

Функция позволяет указать таблицу данных для построения графика. "Код" в функции используется для применения соответствующих заголовков и записи имен файлов, но совпадает с переменной в именах столбцов. Это приложение Получить столбцы за строкой из data.table

Мой вопрос: можно ли вместо этого сделать сопоставление с образцом? Я пытался сделать это с помощью grep и применяя eval() а также quote() как предложено в вопросе передать имя столбца в data.table, используя переменную в R

Я пытался сделать что-то вроде:

plot(dt$date, dt[,grep("min",names(dt))])

Моя причина для попытки сопоставления с образцом состоит в том, что у меня есть несколько colnames Я планирую, и первое решение кажется рекурсивным. В этом случае "код" соответствует переменной, но что, если это не так, и я все еще хочу сопоставить шаблон?

Спасибо

2 ответа

Решение

Предложенный ответ Фрэнка самый прямой. Он был протестирован для построения больших таблиц данных с более высоким уровнем сложности и работал! Упрощенная функция, которая работает с образцами таблиц, приведена ниже.

plt <- function(dt,code) {
plot(dt$date, dt[[grep("min",names(dt))]])
}
plt(dt1,ppp)
plt(dt2,qqq)

Использование таблиц данных %like% Функция даст вам то, что вы хотите, без необходимости создания функции. В зависимости от того, что вы ищете, здесь есть несколько вариантов:

plot(dt1[,.SD, .SDcols=names(dt1) %like% "date|_min$"])

dt1[,lapply(.SD, plot, date), .SDcols=names(dt1) %like% "_min$"]

code <- c("ppp", "qqq")
plot(dt1[,.SD, .SDcols=names(dt1) %like% sprintf("date|(%s)_min$", paste(code, collapse="|"))])
Другие вопросы по тегам