Как использовать dplyr для выполнения описательных операций и проверки хи-квадрат внутри функции

у меня есть похожий вопрос [здесь] [1], но пока dplyr меняет способ работы, я считаю, что мой вопрос оригинален и может помочь другим людям.

Во-первых, я пытаюсь внутри функции вывести описательную статистику и запустить некоторые тесты статистического вывода, такие как хи-квадрат.

Этот синтаксис работает очень хорошо:

> desc_chi <- function(group_var) {   group_var <- enquo(group_var)   j
> <- dataset %>% 
>     group_by(!!group_var) %>% 
>     summarise(n = n())   print(j) } 
desc_chi(GENDER)

Но когда я добавляю тест хи-квадрат, он останавливается и сообщает об ошибке:

desc_chi <- function(group_var) {
  group_var <- enquo(group_var) 
  j <- dataset %>% 
    group_by(!!group_var) %>% 
    summarise(n = n(),
      pvalue=chisq.test(.$LOCATION, .$group_var))
  print(j)
}

Столбец pvalue должен иметь длину 1 (итоговое значение), а не 9.

Спасибо за всю поддержку, которую вы всегда оказываете.


person Luis    schedule 08.03.2018    source источник


Ответы (1)


Как насчет этого?

 desc_chi <- function(dataset, group_var) {   
  group_var <- enquo(group_var)   
  dataset %>% 
      group_by(!!group_var) %>% 
      summarise(n = n()) %>% 
      mutate(chisq_pval = chisq.test(n)$p.value)   
 } 


mtcars %>% 
     desc_chi(cyl)


# A tibble: 3 x 3
    cyl     n chisq_pval
   <dbl> <int>      <dbl>
1  4.00    11      0.315
2  6.00     7      0.315
3  8.00    14      0.315
person Adam Black    schedule 08.03.2018
comment
Спасибо, @ adam-black, я все утро пытался добиться такого результата, а ты решил проблему !!!! - person Luis; 09.03.2018
comment
Рад, что смог помочь! - person Adam Black; 09.03.2018
comment
Можно ли изменить этот код на что-то вроде chisq.test (variable1, group_var)? Эта переменная group_var определяется функцией! Еще раз спасибо - person Luis; 09.03.2018
comment
@ Луис Я не думаю, что понимаю. Может быть, вы можете привести пример. - person Adam Black; 09.03.2018
comment
Используя mtcars, chisq.test (mtcars $ am, mtcars $ gear). Это работает. Возможно ли что-то вроде test ‹- function (x, y) {chisq.test (mtcars $ x, mtcars $ y)} и запустить test (am, gear). Спасибо - person Luis; 09.03.2018
comment
Нравится? test ‹- функция (x, y) {chisq.test (table (mtcars [[x]], mtcars [[y]]))} test (am, gear) - person Adam Black; 09.03.2018
comment
Вы просто можете использовать count(!!group_var) вместо группировки и суммирования. - person Roman; 12.03.2018