2017-03-29 30 views
0

您好,我正在嘗試計算一組數據的Chi Sq值。每組有6或7行,它們由一個標誌組成。我共有619行和91個標誌。所以對於每個組我都會得到一個chisq和p值。我希望所有91組輸出,所以我可以將它們粘貼到Excel中。我沒有太多的編碼,但嘗試了一個循環,最終只給了我最後一個值。這是說,我有50個左右的警告,但沒有按照要求放棄輸出。下面是摘錄:應用循環卡方檢驗在R

transaged <- transform(transaged, flag = as.numeric(interaction(HO_GROUP_CODE,START_DATE, drop=TRUE))) 
for (i in 1:max(transaged$flag)) 
{ 
    survey=as.data.frame(rbind(transaged$CHO,transaged$HO))[transaged$flag==i] 
    chisq.test(survey) 
    Sys.time() 
    chisq.test(survey)$p.value 
    result <- cbind(rownames(transaged),chisq.test(survey)$p.value) 
    } 

我所要的輸出是這樣的 1. CHISQ 21.34 P值0.9 2. CHISQ 12.34 P值0.89 並以此類推,直到91

我也希望rownames到可以是自從標記通過分組而創建之後轉換的數據框的第一列和第二列的組合。

所以它應該是這樣的:

HO_GROUP_CODE(1st entry),START_DATE(1st entry) Chisq 21.34 pvalue 0.9 
HO_GROUP_CODE(1st entry),START_DATE(2nd entry) Chisq 21.34 pvalue 0.89 

HO_GROUP_CODE START_DATE AGE HO HO* 
1    12th Oct 4 12 23 
1    15th Nov 5 23 34 
2    16th Dec 6 23 35 
..... 

何錫麟*是在卡的測試對比,而具有不同的通過HO組碼分組年齡和開始日期。

如果可以避免循環,也請指教我。我在這裏找到了一些幫助,但無法涉及到我需要的東西。如果有類似的線程請重定向到它。非常感謝!

+0

你能提供最小數據集? – Miha

+0

當然。更新了問題。請看看它。 –

+0

如果有人正在閱讀此內容。謝謝!我已經解決了這個問題。 –

回答

0

這裏是一個問題的解決,我問

i=1 
for (i in 1:max(transaged$flag)) 

{ 
    survey=as.data.frame(rbind(transaged$CHO[transaged$flag==i],transaged$HO[transaged$flag==i])) 
    chisq.test(survey)$p.value 
    result1 <- as.data.frame(cbind(flag=i,ChiSq=chisq.test(survey)$statistic,DF=chisq.test(survey)$parameter,Pvalue=chisq.test(survey)$p.value)) 
result<-rbind(result,result1) 
    } 
finalage<-merge(result,unique(transaged[,.(HO_GROUP_CODE,START_DATE,flag)]),by='flag') 
finalage$identifier<-'AGE'