R:在数据帧或矩阵中使用t.test函数

时间:2013-09-26 15:20:25

标签: r dataframe

我想使用t.test函数来比较存储在数据帧中的值组。假设我的数据框有2列:“group”和“result”以及40行。 “result”列包含我想要比较的值,“group”列表示值被分割的组:例如4个组(a,b,c,d),每个值为10个值。

如何指示我只想测试属于组a的值与属于组b的值?

或者,是否有一种简单的方法可以将属于a组的值提取到一个向量中(让我们称之为“vecta”),以便随意比较这些向量?

提前致谢! SEB

4 个答案:

答案 0 :(得分:6)

您问:“我如何表明我只想测试属于组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

答案 1 :(得分:2)

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的结果)。

答案 2 :(得分:1)

以下不是“随意”,而是自动计算所有“组”变量对。

以下是一些示例数据:

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)

至于提取单独的向量,我认为list向量可能更方便,您可以使用split

x <- split(mydf$result, mydf$group)

答案 3 :(得分:1)

with(subset(df, group %in% c("a", "b")),
     t.test(value ~ factor(group))
#
# df - your data.frame
#