首页 > 解决方案 > 在 R 中执行大量 2 样本 t 检验

问题描述

所以我正在创建一个函数,它允许我获取一个 data.frame 并为每个测试的变量获取一个 p.values 的数据帧。

    # data and labels
my_data <- data.frame(matrix(data = rnorm(10000), nrow = 100, ncol = 10000))
labels <- sample(0:1, 100, replace = TRUE)


# append the labels to the data, then filter
my_data$labels <- labels

sample_1 <- dplyr::filter(.data = my_data, labels == 0)
sample_2 <- dplyr::filter(.data = my_data, labels == 1)


#perform a t-test on each column
p_vals <- data.frame()
for(i in c(1:10000)) {
    p_vals <- rbind(p_vals, t.test(x = sample_1[,i], y = sample_2[,i])$p.value)
}

return(p_vals)

这是功能性的,但我认为/希望在没有 for 循环的情况下会有更有效的方法来做到这一点。数据应该成行,因为对于以后的函数,跟踪哪个变量具有哪个 p 值很重要。

标签: rdplyrstatistics

解决方案


您可以使用公式接口来代替拆分样本t.test,并sapply在 的列上my_data进行测试:

p_vals <- sapply( my_data, function(x) t.test(x ~ labels)$p.value )

这将生成一个 p 值向量,其顺序将与my_data


推荐阅读