如何基于两个值

如何基于两个值

问题描述:

向量给名单上的分组数据计算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-值与计算出的

我该如何实现这一目标?

+0

请检查第二个值,我得到'0.0897' – akrun

我们可以使用一个循环

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