Там должен быть лучшим способом сделать это.Я бы, вероятно, согласился с подходом Антониоса, но у меня возникает соблазн не использовать filter
, а вместо этого распределить цены на разные цвета в столбцы списка.К сожалению, лучший код, который я мог придумать, был еще длиннее:
diamonds %>%
group_by(cut, color) %>%
summarize(price = list(price)) %>%
spread(color, price) %>%
nest() %>%
mutate(price_avg = map_dbl(data, ~ t.test(.x$E[[1L]], .x$I[[1L]])$p.value))
Идея в том, чтобы получить два столбца списка, I
и E
, по цене бриллиантовсоответствующий цвет.Теперь мы можем запустить t-тест для этих двух столбцов (но, к сожалению, нам нужно отменить их список для того, чтобы это работало).
Я в основном ставлю это здесь как начало разговора.Ясно, что это не тот код, который вы когда-либо хотели бы написать, но я считаю, что должен быть короткий, логичный способ выражения этой логики (или это уже возможно, и я упускаю это из виду, или API-интерфейс данных должен бытьдополнено).
В качестве альтернативы мы можем использовать API формул для t.test
:
diamonds %>%
filter(color %in% c('E', 'I')) %>%
nest(-cut) %>%
mutate(price_avg = map_dbl(data, ~ t.test(price ~ color, .x)$p.value))
Для полноты, здесь то же самое, используя broom::tidy
(это возвращает больше столбцов, чем просто p-значение):
diamonds %>%
filter(color %in% c('E', 'I')) %>%
nest(-cut) %>%
mutate(test = map(data, ~ tidy(t.test(price ~ color, .x)))) %>%
unnest(test)
В результате получается следующая таблица:
cut data estimate estimate1 estimate2 statistic p.value parameter conf.low conf.high method alternative
<ord> <list> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <fct>
1 Fair <tibble [1 × 7]> -1003. 3682. 4685. -2.91 3.90e- 3 327. -1682. -324. Welch Two Sample t-test two.sided
2 Good <tibble [1 × 7]> -1655. 3424. 5079. -7.19 1.46e-12 827. -2107. -1203. Welch Two Sample t-test two.sided
3 Very Good <tibble [1 × 7]> -2041. 3215. 5256. -13.4 2.44e-39 1860. -2339. -1743. Welch Two Sample t-test two.sided
4 Premium <tibble [1 × 7]> -2407. 3539. 5946. -15.5 7.27e-52 2405. -2711. -2103. Welch Two Sample t-test two.sided
5 Ideal <tibble [1 × 7]> -1854. 2598. 4452. -17.0 7.63e-62 3081. -2069. -1640. Welch Two Sample t-test two.sided