2014-12-03 56 views
0

做出chisq.test()的參數,我有以下的數據幀:如何R中

DF

User Feature1 Feature2 Num 
name1 a   x1   12 
name1 a   x2   3 
name1 a   x3   7 
name1 b   x2   3 
name2 a   x2   8 
name2 b   x3   7 
name2 c   x2   3 

...

第一行EXP:用戶「name1」從「a」連接到「x1」12次。

我想爲每個用戶(考慮到連接數)在M1到M2之間創建一個chisq.test()表。

輸出表中的行數應該等於數據框中的用戶數量。

謝謝!

回答

0

與數據例子的問題是,如果chisq.test任何行或列總和返回NA爲0

by(df[-1], df[[1]], function(d) { 
       tbl <- xtabs(Num ~ Feature1 + Feature2, data=d) 
       i <- apply(tbl, 1, sum) > 0 
       j <- apply(tbl, 2, sum) > 0 
       chisq.test(tbl[i,j])}) 
#-------- result ---------- 
df[[1]]: name1 

    Pearson's Chi-squared test 

data: tbl[i, j] 
X-squared = 10.7955, df = 2, p-value = 0.004527 

---------------------------------------------------------------- 
df[[1]]: name2 

    Pearson's Chi-squared test 

data: tbl[i, j] 
X-squared = 18, df = 2, p-value = 0.00
+0

感謝。解決方案建議的作品,但它不完全是我需要的。我希望每個用戶都使用chisq.test(),而不是使用所有用戶功能。對於exm:用戶「name1」與feature1:a,b而不是c。你有好主意嗎? – 2014-12-04 09:10:24

+0

我不明白這與現在正在做什麼不同。如果您只是想根據給定'name_x'中存在的i-j值更改返回值的名稱,那麼您是否嘗試過使用'setNames'。 – 2014-12-04 17:23:20

+0

感謝BondedDust! – 2015-08-09 13:00:33