сопоставление списков с помощью `nds_with` для применения пользовательской функции ошибок - PullRequest
1 голос
/ 06 ноября 2019

У меня есть список, который выглядит следующим образом:

enter image description here

Я пытаюсь map поверх него и использовать функцию mutate, чтобы применитьпользовательская функция. Список называется results, и я хочу вычислить ошибку между preds и другим столбцом во фрейме данных. Общей темой этого столбца во всех списках является 1 в самом конце одного из столбцов.

Как я могу вычислить свою пользовательскую функцию, используя contain, ends_with или что-то подобное? Столбец preds одинаков во всех фреймах данных.

rse <- function(x, y){
  sqrt((x - y)**2)      
}

x <- map(results, ~mutate(
  error = rse(ends_with("1"), preds)
))

Данные:

list(`c(5, 19)` = structure(list(date = structure(c(16801, 16802, 
16803, 16804, 16805, 16806), class = "Date"), year = c(2016, 
2016, 2016, 2016, 2016, 2016), c_farolillo = c(17, 9, 8, 3, 4, 
4), plaza_eliptica = c(25, 29, 18, 11, 13, 9), c_farolillo1 = c(17, 
9, 8, 3, 4, 4), preds = c(7.08282661437988, 9.66606140136719, 
5.95918273925781, 3.81649804115295, 4.26900291442871, 3.38829565048218
)), row.names = c(NA, 6L), class = "data.frame"), `c(7, 1, 2, 18)` = structure(list(
    date = structure(c(16801, 16802, 16803, 16804, 16805, 16806
    ), class = "Date"), year = c(2016, 2016, 2016, 2016, 2016, 
    2016), pza_del_carmen = c(12, 10, 10, 6, 8, 4), pza_de_espana = c(28, 
    21, 14, 8, 10, 6), escuelas_aguirre = c(17, 24, 19, 20, 22, 
    16), retiro = c(6, 5, 7, 3, 2, 2), pza_del_carmen1 = c(12, 
    10, 10, 6, 8, 4), preds = c(15.3020477294922, 16.007848739624, 
    15.3953952789307, 9.59985256195068, 9.85349082946777, 8.42792892456055
    )), row.names = c(NA, 6L), class = "data.frame"))

1 Ответ

1 голос
/ 06 ноября 2019

Мы перебираем list из data.frames ('результаты') с map, затем используем mutate_at, чтобы изменить столбцы с именами, которые ends_with "1", применяя функцию rse при указаниистолбец 'y' as 'preds'

library(dplyr)
library(purrr)
results <- map(results, ~ .x %>%
                 mutate_at(vars(ends_with("1")), list(new = ~ rse(., y = preds))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...