#r #dplyr
#r #dplyr
Вопрос:
Я пытаюсь запустить другую модель для каждого df и сохранить все это в том же df после вложения.
Пример кода:
mt<- mtcars %>% group_by(cyl,am) %>% nest() %>%
mutate(formula = "Add separate model for each row in text like mpg~wt for one row, mpg~wt hp for another etc.")
mt$formula[[1]] <- "mpg~wt"
mt$formula[[2]] <- "mpg~wt drat"
mt$formula[[3]] <- "mpg~wt qsec"
mt$formula[[4]] <- "mpg~wt gear"
mt$formula[[5]] <- "mpg~wt"
mt<- mutate(model = ?)
Комментарии:
1. 6-я строка не является формулой
Ответ №1:
Мы можем использовать map2
для перебора list
столбца «данные» и соответствующих элементов «формулы», применить lm
и назначить его обратно в новый столбец «модель»
library(purrr)
mt$model <- vector('list', nrow(mt))
mt$model[1:5] <- map2(mt$data[1:5], mt$formula[1:5], ~ lm(.y, data = .x))
mt
# A tibble: 6 x 5
# Groups: cyl, am [6]
# cyl am data formula model
# <dbl> <dbl> <list> <chr> <lis>
#1 6 1 <tibble [3 × 9]> mpg~wt <lm>
#2 4 1 <tibble [8 × 9]> mpg~wt drat <lm>
#3 6 0 <tibble [4 × 9]> mpg~wt qsec <lm>
#4 8 0 <tibble [12 × 9]> mpg~wt gear <lm>
#5 4 0 <tibble [3 × 9]> mpg~wt <lm>
#6 8 1 <tibble [2 × 9]> Add separate model for each row in text like mpg~wt for one row, mpg~wt hp for another … <NUL…
Комментарии:
1. Спасибо. У меня есть пара более общих вопросов. Почему формула должна быть списком? И есть ли более элегантный способ, чем указывать номера строк df (например, по условиям строки) при добавлении формулы?
2. @Stat. В вашем случае это строка, и ей не обязательно быть
list
. т. Е. у вас может быть обычный столбец.3. Спасибо. Как насчет этого в качестве опции редактирования (не работает, но в этом смысл кода)
mt$cyl[6]$am[1]$model <- "mpg~wt"
4. @Stat. Энтузиазм. Я не понял показанный вами код и входные данные.
mt$cyl[6]$am[1]
. Здесь ‘cyl’ — это другой столбец, а ‘am’ — другой5. Я говорю, что вместо указания просто числа строк, равного 1, чтобы сделать код более читаемым, я пытаюсь выделить модель, указав cyl и am и вставив модель. Простите меня за «псевдод»