【问题标题】:Performing T test by columns按列执行 T 检验
【发布时间】:2019-08-16 23:04:55
【问题描述】:

data

根据上面的数据集,我有一列名为“组”,它指定了组类型 p 或组类型 f 的每个成员的数据。我想执行 t 检验并为每个变量(1,2...x)提取两组的 p 值。我知道如何对单个列/变量执行 t 检验,如下面的代码所示。

 t.test(T1_All[[Variable 1]] ~ Group, T1_All, var.equal = TRUE)

注意:T1_All 是我的数据集的名称

我想要做的是使用 apply() 对每个列变量执行 t 检验,因此我不需要对每个变量进行 96 次 t 检验。这是我对解决方案的拙劣尝试

apply(T1_All, 2, function(x) t.test(T1_All[[x]] ~ Group, T1_All, var.equal = TRUE)) 

这是错误信息

Error in t.test.formula(T1_All[[i]] ~ Group, T1_All) : 

分组因子必须正好有 2 个级别

应用(T1_All, 2, function(x) t.test(T1_All[[x]]~Group, T1_All)) 显示回溯

使用调试重新运行 .subset2(x, i) 中的错误:级别 1 没有这样的索引

-结束代码-

此外,我想将 t 检验输出的值(p 值、每个变量的平均值等)放在单独的表中,并在数据框上使用 apply 函数时将它们放在单独的表中。我已经阅读了关于 tidy 包的其他一些帖子,但我仍然不确定如何解决这个问题。

我的编码经验很少,因此我们将不胜感激。谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    一个选项是lapply。获取“组”以外的数据名称,遍历lapply 中的名称,使用paste 创建公式并应用t.test

    vec <- setdiff(names(T1_All), "Group")
    lapply(vec, function(x) t.test(as.formula(paste0(x,  '~ Group')), 
             T1_All, var.equal = TRUE))
    

    数据

    set.seed(2)
    T1_All <- data.frame(Group = rep(c("P", "f"), each = 10), Measurement1 = rnorm(20), Measurement2 = rnorm(20) )
    

    【讨论】:

      【解决方案2】:

      您可以结合使用 dplyrplyr 调用来进行 t 检验并将 p 值提取到一个整洁的数据框中。

      T1_All <- data.frame(Group=sample(c('p','f'),100,T),matrix(rnorm(1000),ncol=10))
      
      T1_All %>% gather(k,v,-Group) %>% 
        ddply(.,.(k),function(x) t.test(x$v~x$Group)$p.value)
      
           k         V1
      1   X1 0.99792904
      2  X10 0.96577838
      3   X2 0.31467877
      4   X3 0.58195417
      5   X4 0.41397033
      6   X5 0.86034057
      7   X6 0.08868437
      8   X7 0.53494848
      9   X8 0.73073014
      10  X9 0.18215440
      

      【讨论】:

        猜你喜欢
        • 2023-01-31
        • 2013-06-02
        • 2014-05-01
        • 1970-01-01
        • 2018-11-19
        • 1970-01-01
        • 2018-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多