Re: [問題] 幾個資料預處理問題

看板R_Language作者 (攸藍)時間9年前 (2015/04/22 17:25), 9年前編輯推噓0(006)
留言6則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《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

04/22 18:06, , 1F
等一下再想想看很多行的情況下,有沒有比較快的方法
04/22 18:06, 1F

04/22 18:31, , 2F
仔細看,其實我們各自寫出來的還蠻像的。不過你精簡多了
04/22 18:31, 2F

04/22 18:47, , 3F
精簡不一定快,有時候只是貪圖方便,我只是不喜歡
04/22 18:47, 3F

04/22 18:47, , 4F
太複雜QQ
04/22 18:47, 4F

04/22 19:35, , 5F
謝謝兩位前輩指教 你們的方法都很受用 謝謝你們
04/22 19:35, 5F

04/23 10:33, , 6F
想到不用一行行做的方法,晚點再來寫個benchmark
04/23 10:33, 6F
※ 編輯: celestialgod (36.225.239.69), 04/23/2015 13:57:07
文章代碼(AID): #1LDsZ-mx (R_Language)
文章代碼(AID): #1LDsZ-mx (R_Language)