首页 > 解决方案 > 对一列中的数据进行配对 t 检验

问题描述

我正在尝试对一列中的变量进行配对 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 的时间(之前与之后)之间的 valueA 是否存在差异
  2. T 检验以确定站点 A 的时间(之前与之后)之间的 valueB 是否存在差异
  3. T 检验以确定站点 B 的时间(之前与之后)之间的 valueA 是否存在差异
  4. T 检验以确定站点 B 的时间(之前与之后)之间的 valueB 是否存在差异

为了运行 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

任何帮助,将不胜感激。

标签: rreshapespreadt-test

解决方案


如果我们想t.test对每个“站点”的“值”列进行操作,那么在按“站点”分组后,选择感兴趣的列summarise_at,并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

推荐阅读