我想使用 t.test 函数来比较存储在数据框中的值组。假设我的数据框有 2 列:“组”和“结果”以及 40 行。“结果”列包含我要比较的值,“组”列表示这些值被划分的组:例如 4 组 (a,b,c,d),每组 10 个值。
如何表明我只想测试属于组 a 的值与属于组 b 的值?
或者,是否有一种简单的方法可以将属于组 a 的值提取到向量中(我们称之为“vecta”)以便随意比较向量?
提前致谢 !塞布
您问:“我如何表明我只想测试属于组 a 的值与属于组 b 的值?”
假设您的数据框被称为df
. 要将组 a 与组 b 与 t.test 进行比较,您可以使用例如:
t.test(df$result[df$group=="a"], df$result[df$group=="b"])
# or
with(df, t.test(result[group=="a"], result[group=="b"]))
# or, fo rexample
t.test(result~group, data=subset(df, group %in% c("a", "b")))
所有方法都应该有效,但未经测试,因为您没有发布任何示例数据:P
“或者,是否有一种简单的方法可以将属于组 a 的值提取到一个向量中(我们称之为“vecta”),以便随意比较向量?”
是的,
df$value[def$group=="a"] # result is a vector
在帮助结束时有一个针对您的情况的示例t.test
:
## Classical example: Student's sleep data
plot(extra ~ group, data = sleep)
## Traditional interface
with(sleep, t.test(extra[group == 1], extra[group == 2]))
## Formula interface
t.test(extra ~ group, data = sleep)
当您有两个组时,第二种形式(公式界面)最简单;你有 4 个。
你可以做到的一种方法(假设你的数据框被调用yourdata
)是
with(yourdata, t.test(result[group == "a"], result[group == "b"]))
至于提取组指示符取特定值的值,执行此操作的方法在上述帮助中的第一种形式中给出(在您的情况下with(yourdata, result[group=="a"])
,只会为您提供组 a 的结果)。
以下不是“随意”,而是自动计算所有“组”变量对。
以下是一些示例数据:
mydf <- data.frame(
group = rep(letters[1:4], each = 10),
result = c(1:10, 5:14, 11:20, 15:24)
)
mydf
您可以使用combn
创建每个组的“对”来使用t.test
。
combn(as.character(unique(mydf$group)), 2,
FUN = function(y) t.test(result ~ group,
mydf[mydf$group %in% y ,]),
simplify = FALSE)
至于提取单独的向量,我认为 a list
of 向量可能更方便,您可以使用split
:
x <- split(mydf$result, mydf$group)
with(subset(df, group %in% c("a", "b")),
t.test(value ~ factor(group))
#
# df - your data.frame
#