对一列数据进行配对t检验

Conduct paired t-test for data in one column

我正在尝试对一列中的变量进行配对 t 检验

这是我的数据示例:

datexample <- data.frame(
  "time" = c("before","after"), 
  "site" = c("A","B","B","A","A","B","B","A"), 
  "valueA" = c("13","-10", "-5", "18","-14","12", "-17", "19"), 
  "valueB" = c("-3","20", "15", "-16","12","15", "-11", "14")
)

输出如下:

time    site  valueA valueB
before    A     13     -3
after     B    -10     20
before    B     -5     15
after     A     18    -16

我正在尝试进行四个配对 t 检验来检查:

  1. T 检验以确定时间之间的值 A 是否存在差异(之前与之后)在站点 A
  2. T 检验以确定时间之间的值 B 是否存在差异(之前与之后)在站点 A
  3. T 检验以确定时间之间的值 A 是否存在差异(之前与之后)在站点 B
  4. T 检验以确定时间之间的值 B 是否存在差异(之前与之后)在站点 B

为了 运行 t 检验,我需要重新排列我的数据,以便前后是每一列(而不是在时间列内)。

我试过看 ,像这样:

dat_wide <- reshape(datexample, idvar = "time", timevar = "site", direction = "wide")
dat_wide

但我最终得到了一个只有两行和很多列的数据集:

time   valueA.A valueB.A valueA.B valueB.B
before       13       -3       -5       15
after        18      -16      -10       20

如有任何帮助,我们将不胜感激。

如果我们想对每个 'site' 的 'value' 列执行 t.test,那么在按 'site'、select 的列分组后对 summarise_at 感兴趣,并通过对 'time' 为 'before'/'after'

的值进行子集化来执行 t.test
library(dplyr)
datexample %>%
    type.convert(as.is = TRUE) %>%
    group_by(site) %>% 
    summarise_at(vars(starts_with('value')), ~ 
       t.test(.[time == 'before'], .[time == 'after'])$p.value)
# A tibble: 2 x 3
#  site  valueA valueB
#  <chr>  <dbl>  <dbl>
#1 A      0.393  0.784
#2 B      0.464  0.439