Я пытаюсь добавить вектор аргументов во вложенный фрейм данных, который позже будет использоваться в качестве дополнений к формуле регрессии, которую я буду использовать с этими данными. Тем не менее, я не могу .. какие мысли?
library(tidyverse)
flights <- nycflights13::flights
flights<- sample_n(flights, 1000)
nested <- flights %>% group_by(origin, dest) %>%
nest() ## groups all the data by the sub series
nested %>% mutate (formula = "airtime ~ distance + carrier")
nested<-nested %>% mutate (add_in = case_when(
origin = = "EWR" & dest = = "CVG" ~ list("year", "hour"),
origin = = "EWR" & dest = = "LAX" ~ list("year", "dep_delay")
))
Это может быть 17-20 разных моделей с одинаковой базовой формулой (только дополнения). есть ли более чистый способ сделать это для 20 моделей?
Да Акрун прав. Либо сделайте это в столбце списка, либо в символе
Мне нужно объединить его позже в начале другого вектора.
В вашей новой строке с list
она должна быть list
с одним элементом, т.е. list(c("year", "hour"))
как в моем посте, чтобы соответствовать длине
Спасибо. Суть в том, чтобы сделать формулу для первой строки, например, такой: эфирное время ~ год + час + расстояние + перевозчик.
Остаются ли distance
и carrier
одинаковыми в формуле для обоих случаев
Да. это просто разные дополнения
Я сомневаюсь, что airtime ~ distance + carrier + year + hour
для первого случая и airtime ~ distance + carrier + year + dep_delay
для второго случая?
Я добавил обновление. Надеюсь, поможет
Спасибо, у меня есть несколько наборов данных, я думаю, как добавить два в качестве параметров, а не в тексте..
@Stat.Enthus Непонятно в вашем случае. Решение основано на показанном вами примере ввода
Мы могли бы либо иметь list
library(dplyr)
nested %>%
mutate(add_in = case_when(
origin = = "EWR" & dest = = "CVG" ~ list(c("sno", "sno2","sno3")),
origin = = "EWR" & dest = = "LAX" ~ list(c("sno", "sno2","sno3"))))
или paste
их вместе (toString
-> paste(., collapse = ", ")
) как одну строку
nested %>%
mutate(add_in = case_when(
origin = = "EWR" & dest = = "CVG" ~ toString(c("sno", "sno2","sno3")),
origin = = "EWR" & dest = = "LAX" ~ toString(c("sno", "sno2","sno3"))))
Если нам нужно создать объект formula
, мы можем сделать это с помощью paste
или reformulate
out <- nested %>%
mutate(add_in = case_when(
origin = = "EWR" & dest = = "CVG" ~
list(reformulate(c("distance", "carrier", "year", "hour"), "airtime")),
origin = = "EWR" & dest = = "LAX"
~ list(reformulate(c("distance", "carrier", "year",
"dep_delay"), "airtime"))))
А как это сделать в списках?
@AnilGoyal Вы можете просто заменить toString
на list
Спасибо! Я обновил свой код в вопросе, чтобы сделать его более понятным.
@Stat.Enthus Вы обновляете этот nested %>% mutate (formula = "airtime ~ distance + carrier")
до исходного набора данных?
Вы пытаетесь добавить вектор значений, длина которого будет отличаться