r data.table использование .SD с несколькими наборами столбцов для получения RMSPE - PullRequest
0 голосов
/ 04 июня 2018

У меня есть набор данных, где я сделал несколько прогнозов.Теперь я хочу вычислить RMSPE , и для этого я использую пакет MLmetrics , как я понимаю, путем ввода прогнозируемого и фактического значения я получу RMSPE .Как бы то ни было, я запутался, как я могу использовать это в data.table , чтобы пропустить 2 набора столбцов.

Мой примерный набор данных будет выглядеть примерно так, как показано ниже -

library(data.table)
library(MLmetrics)

set.seed(123)
id <- seq(1001,1100,1)
city <- sample(1:4,100,replace = T)
a1 <- sample(1:100,100,replace = T)
a2 <- sample(1:100,100,replace = T)
a3 <- sample(1:100,100,replace = T)
a4 <- sample(1:100,100,replace = T)
a5 <- sample(1:100,100,replace = T)
p1 <- sample(1:100,100,replace = T)
p2 <- sample(1:100,100,replace = T)
p3 <- sample(1:100,100,replace = T)
p4 <- sample(1:100,100,replace = T)
p5 <- sample(1:100,100,replace = T)

df1 <- as.data.table(data.frame(id,city,a1,a2,a3,a4,a5,p1,p2,p3,p4,p5))

RMSPE <- df1[, lapply(.SD, function(x,y) RMSPE(x,y),
                       by = city, .SDcols = **xxxx**)] 

Таким образом, в этом случае a1, a2, a3, a4, a5 - мои действительные значения, а p1, p2, p3, p4, p5 - мои прогнозируемые значения. Я хочу передать p1, p2, p3, p4, p5 как xи a1, a2, a3, a4, a5 как y.В результате я ожидаю получить сводную таблицу с 4 строками (по одной для каждого города) и 6 столбцами, 1-й для города, столбец 2-6 для RMSPE для каждой переменной.

Как я могу получить это в data.table.Чем заменить xxxx на?

Спасибо !!

1 Ответ

0 голосов
/ 04 июня 2018

Я не уверен, что это то, что вы ищете

colsToKeep <- c("a1", "a2", "a3", "a4", "a5")
colsToW <- c("p1", "p2", "p3", "p4", "p5")


df1[, Map(function(x,y, w) get(x)(y, w), 
          setNames(rep('RMSPE',length(colsToKeep)), paste("RMSPE", colsToKeep, colsToW, sep = "_")),
          .SD[, ..colsToKeep], .SD[, ..colsToW]),
    by = city]  
...