T-тест между двумя фреймами данных и сгруппированными по одинаковым строкам в R - PullRequest
1 голос
/ 26 июня 2019

Название может быть не совсем ясным, но, надеюсь, я смогу описать его лучше здесь.У меня есть два фрейма данных, и каждый описывает ежемесячные расходы для разных типов клиентов.Например, для клиентов 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

Тогда у меня также есть аналогичный фрейм данных для клиентов B.В идеале мне нужен информационный фрейм, в котором у меня будут результаты T-теста за каждый месяц, сравнивающие расходы между клиентами A и B.Я могу сделать это, используя dplyr () и Broom (), если все данные находятся в одном кадре данных.Есть ли способ сделать это, если у меня есть два фрейма данных, или лучше объединить их вместе, чем выполнить тест T и group_by year_month?

1 Ответ

0 голосов
/ 08 июля 2019

Я согласен с @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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...