使用by。
by(d, d$treatment, function(x) with(x, t.test(effect ~ group)))
# d$treatment: A
#
# Welch Two Sample t-test
#
# data: effect by group
# t = -1.941, df = 2.6904, p-value = 0.1581
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -16.510018 4.510018
# sample estimates:
# mean in group A mean in group B
# 4.333333 10.333333
#
# --------------------------------------------------------
# d$treatment: B
#
# Welch Two Sample t-test
#
# data: effect by group
# t = -3.1623, df = 3.4483, p-value = 0.04191
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -6.4542173 -0.2124494
# sample estimates:
# mean in group A mean in group B
# 4.000000 7.333333
数据:
我制作了新的示例数据,因为您的数据似乎有缺陷。
d <- structure(list(treatment = c("A", "B", "A", "B", "A", "B", "A",
"B", "A", "B", "A", "B"), group = c("A", "A", "B", "B", "A",
"A", "B", "B", "A", "A", "B", "B"), effect = c(1L, 5L, 12L, 9L,
2L, 4L, 8L, 6L, 10L, 3L, 11L, 7L)), out.attrs = list(dim = c(treatment = 2L,
group = 2L, id = 3L), dimnames = list(treatment = c("treatment=A",
"treatment=B"), group = c("group=A", "group=B"), id = c("id=1",
"id=2", "id=3"))), row.names = c(NA, -12L), class = "data.frame")
d
# treatment group effect
# 1 A A 1
# 2 B A 5
# 3 A B 12
# 4 B B 9
# 5 A A 2
# 6 B A 4
# 7 A B 8
# 8 B B 6
# 9 A A 10
# 10 B A 3
# 11 A B 11
# 12 B B 7