首页 文章

R编程:计算具有格式的数据帧的双样本t检验

提问于
浏览
4

晚上好,我有以下数据框:

Sex A  B  C D  E
M   1 20 45 42 12
F   2 10 32 23 43
M   39 32 2 23 43
M   24 43 2 44 12
F   11 3 4 4 11

如何使用apply函数计算性别变量上面列出的数据框的每个数值变量的双样本t检验 . 结果应该是一个包含五列的矩阵:F.mean(女性的数值变量的平均值),M.mean(男性的数值变量的平均值),t(用于t统计量),df(度数)自由)和p(对于p值) .

谢谢!!

2 回答

  • 3

    这是一个使用 apply 的选项,边距为 2

    out = apply(data[,-1], 2, function(x){ 
                unlist(t.test(x[data$Sex == 'M'], x[data$Sex == 'F'])[c(1:3,5)],
                recursive=FALSE)
           })
    
    #> out
    #                            A           B           C          D          E
    #statistic.t         1.2432059  3.35224633 -0.08318328  1.9649783 -0.2450115
    #parameter.df        2.5766151  2.82875770  2.70763487  1.9931486  1.8474695
    #p.value             0.3149294  0.04797862  0.93946696  0.1887914  0.8309453
    #estimate.mean of x 21.3333333 31.66666667 16.33333333 36.3333333 22.3333333
    #estimate.mean of y  6.5000000  6.50000000 18.00000000 13.5000000 27.0000000
    

    data

    data = structure(list(Sex = structure(c(2L, 1L, 2L, 2L, 1L), .Label = c("F", 
    "M"), class = "factor"), A = c(1L, 2L, 39L, 24L, 11L), B = c(20L, 
    10L, 32L, 43L, 3L), C = c(45L, 32L, 2L, 2L, 4L), D = c(42L, 23L, 
    23L, 44L, 4L), E = c(12L, 43L, 43L, 12L, 11L)), .Names = c("Sex", 
    "A", "B", "C", "D", "E"), class = "data.frame", row.names = c(NA, 
    -5L))
    
  • 1

    应该是apply,t.test和aggregate的组合,我想 . 但首先将行名称转换为名称列 . 然后,您可以使用聚合进行子集化,然后使用t.test进行应用

相关问题