2013-09-26 67 views
1

我想使用t.test函数比较存储在数据帧中的值组。假设我的数据框有2列:“组”和“结果”和40行。 “结果”列包含我想要比较的值,“组”列表示值被分成的组:例如4个组(a,b,c,d)各有10个值。R:在数据帧或矩阵中使用t.test函数

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

另外,是否有一种简单的方法将属于组a的值提取到矢量中(我们称之为“vecta”),以便随意比较矢量?

在此先感谢! Seb

+3

欢迎堆栈溢出。发布一些样本数据,你很可能会惊讶于有人能够更迅速地回复你找到有用的答案。 – A5C1D2H2I1M1N2O1R2T1

+0

[Here](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)你可以找到一些提示来完成Ananda刚才所说的 –

回答

3

您问:“我如何表明我只想测试属于组a的值与属于组b的值?”

假设你的数据帧被称为df。与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 
+0

谢谢,那是正是我一直在寻找这整个下午:) – user2617763

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

+1

+1。一个建议:我会使用'%',而不是'=='来避免选择具有NA组值的记录。例如:'group < - c(“a”,“b”,NA); group [group ==“a”];组[组%[%]“a”]'。当这种情况不太可能发生时,这是一种情况,但使用'%in%'作为我的默认值可帮助我避免多年来的许多麻烦。 –

+1

@MattParker +1这是一个很好的观点(尽管NAs不会伤害这里的例子)。我更喜欢'=='的原因是鼓励使用帮助中的例子中的信息,这就是相关示例在'?t.test'下完成的方式。 –

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) 
0
with(subset(df, group %in% c("a", "b")), 
    t.test(value ~ factor(group)) 
# 
# df - your data.frame 
#