2016-09-22 51 views
1

我擁有備選和參考等位基因計數表。我怎麼能在R中循環chi sq測試來爲每一行運行它?我附上了我的桌子的照片。我需要使用altCount和refCount列執行chi sq測試。如何在R中循環卡方檢驗

altCount refCount 
    8  6 
    3  7 
    4  9 

我需要每行的p值。我對R非常陌生。我想出瞭如何對單個行執行chi sq測試,但由於我有幾千行,我需要做一個循環來一次運行它。 我所做的:

bcz <- read.delim("C:/cygwin64/home/sbomb/tables/bc_z_alleles.csv") 
a = bcz[1,6] 
b = bcz[1,7] 
c = c(a,b) 
d = c(0.5,0.5) 
chisq.test(
    x = c, 
    p = d, 
) 

,但我不知道如何循環它整個表。你能否向我解釋如何處理所有細節?

enter image description here

+0

發佈數據圖片不是很有幫助。嘗試在問題本身中包含[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),該示例提供了示例輸入並清楚地顯示了期望的輸出。作爲先生的 – MrFlick

+0

。 Flick解釋說,你需要顯示數據。說這個,我認爲這個例子可能會讓你嘗試然後發佈,如果你不能解決你自己。這次有了可重現的例子。祝你好運http://stackoverflow.com/questions/25350618/run-chi-squared-test-on-a-data-frame。 – user5249203

回答

0

對於初學者最簡單的循環仍然是for循環:

d <- data.frame(a = c(8,3,4), b = c(6,7,9)) 
for(row in 1:nrow(d)){ 
    print(row) 
    print(chisq.test(c(d[row,1],d[row,2]))) 
} 

這也可以用

apply(d, 1, chisq.test) 

後者更短,給你一個列表來完成作爲你的結果,這對於進一步的評估更適合。

+0

謝謝你的建議,但如果在我的數據表中行數是44,850,我應該怎麼做,所以我不能像a = c(8,3,4)那樣重新鍵入每個值? –

+0

我想我找到了答案。如果我輸入:d < - data.frame(a = test1 [,1],b = test1 [,2]),它可以正常工作。 –