看板 R_Language 關於我們 聯絡資訊
※ 引述《sinclairJ (Jun)》之銘言: : 不好意思,又要來請教各位先進了 : 資料檔大概格式如下(均是類別型資料) : (實際資料約為200列乘500000行) : ---------------------------- : 序 Y X1 X2 X3 : 1 1 0 1 2 : 2 1 0 0 0 : 3 2 2 1 1 : 4 1 1 1 2 : 5 2 0 2 2 : 6 2 1 1 2 : 7 2 1 0 1 : 8 1 2 1 1 : 9 1 1 2 0 : 10 2 0 0 2 : ...... : ...... : ..... : ----------------------------- : 以下有幾個互相獨立的資料處理動作要請教各位: : (1)如表格所示,Y有兩種類別,X有三種類別,我想做的處理是比較Y的兩種類別,其他 : 們的X變數是否為同樣類別 : 舉例:Y X1 X2 X3 : 1 0 1 2 : 1 0 2 2 : 2 0 0 1 : 2 0 1 1 : 然後因為X1都一樣,所以我要把X1刪除,請問這個預處理該如何於R上實現? dat[,sapply(dat, function(x){ length(table(x))}) > 1] : (2)接下來我要對每個X變數做類似這樣的處理 : 舉例:X1 : 0 : 1 : 2 : 1 : 2 : 2 : 1 : 2 : 1 : 1 : 先找出最小的類別,其所佔的比例 : 如X1最小的類別是0,比例為1/10,1/10就是我想得到的,只是迴圈不太明白該怎麼寫 dat = data.frame(Y = c(1,1,2,1,2,2,2,1,1,2), X1= c(0,0,2,1,0,1,1,2,1,0), X2= c(1,0,1,1,2,1,0,1,2,0), X3= c(2,0,1,2,2,2,1,1,0,2)) lapply(dat, function(x){ tmp = table(x)/length(x) output = min(tmp) names(output) = names(tmp)[which.min(tmp)] output }) : (3)X變數做C取2組合方式(兩兩相互)對Y做邏輯斯迴歸(這邊的X可轉成數值型資料來處 : 理) : 舉例 : Y X1 X2 X3 : 1 2 1 0 : 2 1 0 1 : 3 2 0 0 : 如果資料是上述這樣 : 我就要建立三條迴歸 : Y~X1+X2 : Y~X2+X3 : Y~X1+X3 : 之後把顯著(p<0.05)的X變數挑出來 : 希望各位先進能指導指導小弟 : 若問題描述還不夠清楚 : 我會再補充,先跟版上各位先進說聲謝謝了 lapply(apply(combn(3, 2), 2, function(x){ paste("Y-1~", paste("X", 1:2, sep="", collapse="+")) }), function(f) glm(as.formula(f), data = dat, family=binomial)) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.166.185.71 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1429694718.A.C3B.html
celestialgod: 等一下再想想看很多行的情況下,有沒有比較快的方法 04/22 18:06
andrew43: 仔細看,其實我們各自寫出來的還蠻像的。不過你精簡多了 04/22 18:31
celestialgod: 精簡不一定快,有時候只是貪圖方便,我只是不喜歡 04/22 18:47
celestialgod: 太複雜QQ 04/22 18:47
sinclairJ: 謝謝兩位前輩指教 你們的方法都很受用 謝謝你們 04/22 19:35
celestialgod: 想到不用一行行做的方法,晚點再來寫個benchmark 04/23 10:33
※ 編輯: celestialgod (36.225.239.69), 04/23/2015 13:57:07