Я согласен с @Gainz в комментариях к концепции. Объединение фреймов данных, вероятно, самый простой подход. Однако настоящая операция типа слияния, например, left_join()
и т. Д. На самом деле может и не понадобиться; простого использования bind_rows()
может быть достаточно.
# read data from question
df_A <-
'year_month customer_id monthly_spending
201301 123 5.50
201301 124 2.30
201301 125 6.80
201302 123 8.30
201302 124 5.60' %>%
str_replace_all('[ ]++', '\t') %>%
read_tsv
# simulate more data for customer group "B"
df_B <-
df_A %>%
mutate(monthly_spending = monthly_spending + rnorm(5))
# combine the dataframes
df_all <-
bind_rows(list('A' = df_A, 'B' = df_B), .id = 'customer_type')
# use broom to do a tidy t.test()
df_all %>%
group_by(year_month) %>%
do(tidy(t.test(formula = monthly_spending ~ customer_type,
data=.)))
Объединенный фрейм данных df_all
здесь
# A tibble: 10 x 4
customer_type year_month customer_id monthly_spending
<chr> <dbl> <dbl> <dbl>
1 A 201301 123 5.5
2 A 201301 124 2.3
3 A 201301 125 6.8
4 A 201302 123 8.3
5 A 201302 124 5.6
6 B 201301 123 6.25
7 B 201301 124 2.63
8 B 201301 125 7.04
9 B 201302 123 9.11
10 B 201302 124 5.11
Результат выполнения t.tests -
# A tibble: 2 x 11
# Groups: year_month [2]
year_month estimate estimate1 estimate2 statistic p.value parameter conf.low
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 201301 -0.692 4.87 5.56 -0.341 0.750 3.93 -6.35
2 201302 -0.0453 6.95 7.00 -0.0334 0.979 1.02 -16.4
# … with 3 more variables: conf.high <dbl>, method <chr>, alternative <chr>