如何基于两个值
问题描述:
向量给名单上的分组数据计算t.test我有以下的数据帧:如何基于两个值
library(tidyverse)
dat <- tribble(
~sample, ~rep, ~area,
"S1", "01", 100,
"S1", "02", 200,
"S1", "01", 300,
"S2", "01", 10,
"S2", "02", 20,
"S2", "02", 30,
"S3", "01", 1.2,
"S3", "02", 2.3,
"S3", "02", 3.1
)
dat
#> # A tibble: 9 x 3
#> sample rep area
#> <chr> <chr> <dbl>
#> 1 S1 01 100.0
#> 2 S1 02 200.0
#> 3 S1 01 300.0
#> 4 S2 01 10.0
#> 5 S2 02 20.0
#> 6 S2 02 30.0
#> 7 S3 01 1.2
#> 8 S3 02 2.3
#> 9 S3 02 3.1
我想要做的就是创建一个函数,它将带有 成对值的向量列表,然后计算从area
列的t.test派生的P值。
富勒示例给出该列表:
wanted_pairs <- list(c("S1","S2"), c("S2","S3"))
我们想产生该数据帧:
t.test(dat[dat$sample=="S1",]$area, dat[dat$sample=="S2",]$area)$p.value
t.test(dat[dat$sample=="S2",]$area, dat[dat$sample=="S3",]$area)$p.value
:
S1 S2 0.0878746
S2 S3 0.07564237
手动,上述P-值与计算出的
我该如何实现这一目标?
答
我们可以使用一个循环
library(dplyr)
lapply(wanted_pairs, function(x)
dat %>%
filter(sample %in% x) %>%
summarise(sample1 = unique(sample)[1], sample2 = unique(sample)[2],
pval = t.test(area[sample == sample1],
area[sample == sample2])$p.value)) %>%
bind_rows()
# A tibble: 2 x 3
# sample1 sample2 pval
# <chr> <chr> <dbl>
#1 S1 S2 0.0878746
#2 S2 S3 0.0897509
请检查第二个值,我得到'0.0897' – akrun