2013-09-26 68 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 
#