Как создать список с ключевым столбцом? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть фрейм данных, который я хочу перечислить по часам.

wkd = data.frame(hour = c(0,0,1,1,2,2), 
distance = c(5.69,0.56,6.90,1.81,9.88,1.56), 
time = c(23,3,17,7,32,7),
fare = c(18.35,5.39,18.46,12.90,28.08,5.81))

  hour distance time fare
1    0     5.69   23 18.35
2    0     0.56   3  5.39
3    1     6.90   17 18.46
4    1     1.81   7  12.90
5    2     9.88   32 28.08
6    2     1.56   7  5.81

После создания списка я хочу зациклить функцию lm с помощью fare ~ time + distance

Я пыталсяиспользовать применить к фрейму данных безуспешно:

a = apply(wkd,2,as.list)

Как создать цикл для линейной модели в R
Это выглядит актуально для того, что я хочу, когда у меня естьфрейм данных в формате списка по часам.

После того, как список создан, я хочу зациклить lm() on fare ~ distance + time и в конце я хочу получить коэффициенты в виде фрейма данных с 24 линейными уравнениями

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

  hour distance   time  intercept
1    0     2.25   0.36  2.35
2    1     3.25   0.41  3.45
3    2     4.56   0.22  5.22

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Если я правильно понимаю ваш вопрос, вы хотите запускать линейную модель для данных за каждый час.

Если это так, мы можем использовать split() для создания списка и затем sapply для запускамодель

wkd = split(wkd, f=wkd$hour)
res = sapply(wkd,function(x) lm(fare~ distance + time,data=x)$coefficients)

#Expected output
t(res)
1 голос
/ 10 апреля 2019

Одна tidyverse возможность может быть:

wkd %>% 
 group_by(hour) %>%
 do(model = lm(fare ~ time + distance, data = .)$coefficients) %>%
 tidy(model) %>%
 mutate(names = ifelse(names == "(Intercept)", "intercept", names)) %>%
 spread(names, x) %>%
 select(hour, intercept, everything())

   hour intercept distance  time
  <dbl>     <dbl>    <dbl> <dbl>
1     0     3.45        NA 0.648
2     1     9.01        NA 0.556
3     2    -0.426       NA 0.891
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...