Добавление вектора с использованием case_when R

Я пытаюсь добавить вектор аргументов во вложенный фрейм данных, который позже будет использоваться в качестве дополнений к формуле регрессии, которую я буду использовать с этими данными. Тем не менее, я не могу .. какие мысли?

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 моделей?

Вы пытаетесь добавить вектор значений, длина которого будет отличаться

akrun 24.12.2020 17:32

Да Акрун прав. Либо сделайте это в столбце списка, либо в символе

AnilGoyal 24.12.2020 17:32

Мне нужно объединить его позже в начале другого вектора.

Stat.Enthus 24.12.2020 17:34

В вашей новой строке с list она должна быть list с одним элементом, т.е. list(c("year", "hour")) как в моем посте, чтобы соответствовать длине

akrun 24.12.2020 17:49

Спасибо. Суть в том, чтобы сделать формулу для первой строки, например, такой: эфирное время ~ год + час + расстояние + перевозчик.

Stat.Enthus 24.12.2020 17:57

Остаются ли distance и carrier одинаковыми в формуле для обоих случаев

akrun 24.12.2020 18:05

Да. это просто разные дополнения

Stat.Enthus 24.12.2020 18:28

Я сомневаюсь, что airtime ~ distance + carrier + year + hour для первого случая и airtime ~ distance + carrier + year + dep_delay для второго случая?

akrun 24.12.2020 18:30

Я добавил обновление. Надеюсь, поможет

akrun 24.12.2020 18:33

Спасибо, у меня есть несколько наборов данных, я думаю, как добавить два в качестве параметров, а не в тексте..

Stat.Enthus 24.12.2020 18:38

@Stat.Enthus Непонятно в вашем случае. Решение основано на показанном вами примере ввода

akrun 24.12.2020 19:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
11
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы могли бы либо иметь 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 24.12.2020 17:38

@AnilGoyal Вы можете просто заменить toString на list

akrun 24.12.2020 17:39

Спасибо! Я обновил свой код в вопросе, чтобы сделать его более понятным.

Stat.Enthus 24.12.2020 17:46

@Stat.Enthus Вы обновляете этот nested %>% mutate (formula = "airtime ~ distance + carrier") до исходного набора данных?

akrun 24.12.2020 17:47

Другие вопросы по теме