我知道如何为单个变量执行所有这些操作,但我需要报告大量变量的此信息,并且想知道是否有一种有效的方法可以做到这一点。
最佳答案
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/