【问题标题】:Running a shapiro test in R在 R 中运行 shapiro 测试
【发布时间】:2016-04-04 11:45:33
【问题描述】:

如果我有一张这样的桌子:

group1   group2    frequency
  A        B          1
  A        A          2
  A        D          4
  A        C          1
  B        B          1
  B        D          5
  B        C          6
  B        A          3
  .        .          .
  .        .          .
  .        .          .

我想通过“group1”运行一个 shapiro 测试组。我想要的结果是:

group1    statistics       p.value
  A       0.9475648     1.228816e-01                                 
  B       0.7533102     6.058378e-06
  .           .               .
  .           .               .
  .           .               .

有人知道吗?

【问题讨论】:

    标签: r normal-distribution


    【解决方案1】:

    这就是你要找的吗?

    tab <- data.frame(group1=c("A","A","A","A","B","B","B","B"), group2=c("B","A","D","C","B","D","C","A"), frequency=c(1,2,4,1,1,5,6,3))
    do.call(rbind, by(tab, tab$group1, function(x) unlist(shapiro.test(x$frequency)[c("statistic","p.value")])))
    

    或者这个:

    library(plyr)
    ddply(tab, .(group1),  
        function(x) unlist(shapiro.test(x$frequency)[c("statistic","p.value")]))
    

    【讨论】:

    • 是的,类似的东西 - 这是一个 data.table 翻译dat[, shapiro.test(frequency)[c("statistic","p.value")], by=group1]
    【解决方案2】:

    dplyr

    library(dplyr)
    dat %>%
      group_by(group1) %>% 
      do(data.frame(shapiro.test(.$frequency)[c("statistic", "p.value")]))
    
    #   group1 statistic   p.value
    #   (fctr)     (dbl)     (dbl)
    #1      A 0.8274267 0.1611906
    #2      B 0.9630724 0.7982271
    

    数据

    dat <- data.frame(group1=c("A","A","A","A","B","B","B","B"), 
           group2=c("B","A","D","C","B","D","C","A"), 
           frequency=c(1,2,4,1,1,5,6,3))
    

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 2017-12-25
      • 2021-11-07
      相关资源
      最近更新 更多