Создание таблицы со значениями wilcox.test p для нескольких столбцов подгруппы в R

#r #dataframe #datatable #statistics #calculated-columns

#r #dataframe #datatable #Статистика #вычисляемые столбцы

Вопрос:

У меня есть df1 ниже. Я хотел бы систематически вычислять wilcox.test значения p, чтобы проверить variable , значительно ли они выше / ниже для каждого цвета, как определено в столбцах color1 and color2 .

Я хотел бы протестировать это для всех выборок и для каждой группы в столбце group .

Я надеюсь создать новую data.frame таблицу с результатами, включая номера выборок на group (n). Ожидаемый результат показан df2 ниже. Обратите внимание, однако, что значения p в df2 составлены только в качестве примеров.

  df1 <- data.frame(
      stringsAsFactors = FALSE,
               sample = c(1L,2L,3L,4L,
                          5L,6L,7L,8L,9L,10L,11L,12L,13L,14L,15L,
                          16L,17L,18L,19L,20L,21L,22L,23L,24L,25L,
                          26L,27L,28L,29L,30L),
                group = c("a","a","a",
                          "a","a","a","a","a","a","a","a","a","a",
                          "a","a","a","b","b","b","b","b","b","c",
                          "c","c","c","c","c","c","c"),
             variable = c(5L,2L,4L,4L,
                          1L,3L,3L,5L,1L,7L,13L,9L,4L,4L,3L,12L,
                          0L,11L,1L,3L,0L,4L,5L,2L,6L,4L,6L,7L,5L,
                          3L),
               color1 = c("black","white",
                          "white","black","black","white","white",
                          "black","black","black","black","black","white",
                          "white","black","white","black","white",
                          "black","white","black","white","white","white",
                          "black","white","black","black","white",
                          "black"),
               color2 = c("red","blue",
                          "blue","blue","red","blue","blue","red","blue",
                          "red","red","blue","red","red","red",
                          "blue","blue","red","blue","red","red","blue",
                          "red","red","red","blue","red","blue","blue",
                          "blue")
        )

 df2 <- data.frame(
     stringsAsFactors = FALSE,
         group = c("all", "a", "b", "c"),
             n = c(30L, 16L, 6L, 8L),
   color1_pval = c(0.0485, 0.9641, 0.0832, 0.3882),
   color2_pval = c(0.6727, 0.4121, 0.1282, 0.4344)
        )
  

Ответ №1:

Вы можете попробовать :

 library(dplyr)

df1 %>%
  group_by(group) %>%
  summarise(n = n(),
            color1_pval = wilcox.test(variable[color1 == 'white'], 
                                      variable[color1 == 'black'])$p.value, 
            color2_pval = wilcox.test(variable[color2 == 'blue'], 
                                      variable[color2 == 'red'])$p.value)

#  group     n color1_pval color2_pval
#  <chr> <int>       <dbl>       <dbl>
#1 a        16      0.556        0.457
#2 b         6      0.0765       0.825
#3 c         8      0.189        1    
  

Комментарии:

1. Вау! Это действительно потрясающе! Большое тебе спасибо, Ронак. — Syl.

2. Есть ли способ подавить ошибки и произвести NA ? Иногда мои данные имеют только один цвет для подгруппы, а затем wilcox.text выдает ошибку ( not enough (non-missing) 'x' observations ). Я пытался tryCatch(..., error=function(err) NA) , но это не сработало. Спасибо.

3. Что-то вроде этого может быть в summarise : if(n_distinct(color1) > 1) wilcox.test(variable[color1 == 'white'], variable[color1 == 'black'])$p.value else NA

4. Я попробую. Спасибо! 🙂