我知道如何为单个变量执行所有这些操作,但我需要报告大量变量的此信息,并且想知道是否有一种有效的方法可以做到这一点。

最佳答案

tables 包使除 p 值之外的所有内容都变得简单,并且 p 值是可行的。这是一个快速示例:

> library(tables)
> iris2 <- iris[ iris$Species != 'versicolor', ]
> iris2$Species <- factor(iris2$Species)
> tmp <- tabular( Petal.Width+Petal.Length + Sepal.Width+Sepal.Length ~ Species* (mean+sd), data=iris2 )
>
> tmp.p <- sapply( names(iris2)[1:4], function(x) t.test( iris2[[x]] ~ iris2$Species )$p.value )
>
> tmp

              setosa        virginica
              mean   sd     mean      sd
 Petal.Width  0.246  0.1054 2.026     0.2747
 Petal.Length 1.462  0.1737 5.552     0.5519
 Sepal.Width  3.428  0.3791 2.974     0.3225
 Sepal.Length 5.006  0.3525 6.588     0.6359

> tmp2 <- cbind(tmp, tmp.p)
> colnames(tmp2) <- c('Setosa Mean','Setosa SD', 'Virginica Mean','Virginica SD',
+ 'P-value')
> tmp2
             Setosa Mean Setosa SD Virginica Mean Virginica SD P-value
Sepal.Length 0.246       0.1053856 2.026          0.2746501    3.966867e-25
Sepal.Width  1.462       0.173664  5.552          0.5518947    4.570771e-09
Petal.Length 3.428       0.3790644 2.974          0.3224966    9.269628e-50
Petal.Width  5.006       0.3524897 6.588          0.6358796    2.437136e-48

#### 编辑 ####

看起来较新版本的 tabular 做了更多检查,这使得 cbind 方法不再起作用(这可能是一件好事,因为如果排序不同,我不确定它是否正确匹配了值)。我没有找到仍然使用 cbind 执行此操作的简单方法(尽管您可以转换为矩阵,填充标题的行,然后是 cbind )。

这是另一种有效的方法,它仍然有点麻烦,因为它对函数中的物种变量进行了硬编码(因此必须针对使用它的每个表专门更新该函数):
library(tables)
iris2 <- iris[ iris$Species != 'versicolor', ]
iris2$Species <- factor(iris2$Species)
P.value <- function(x) t.test(x ~ iris2$Species)$p.value
tmp <- tabular( Petal.Width+Petal.Length + Sepal.Width+Sepal.Length ~ Species* (mean+sd) + P.value, data=iris2 )
tmp

关于R:如何根据实验组以及 p 值创建带有均值和 sd 的表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9378482/

10-09 01:40