У меня есть фрейм данных, который я хочу перечислить по часам.
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
Если я правильно понимаю ваш вопрос, вы хотите запускать линейную модель для данных каждый час.
Если это так, мы можем использовать split()
для создания списка, а затем sapply
для запуска модели.
wkd = split(wkd, f=wkd$hour)
res = sapply(wkd,function(x) lm(fare~ distance + time,data=x)$coefficients)
#Expected output
t(res)
Одна 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