Re: [問題] 幾個資料預處理問題
※ 引述《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上實現?
假如該 data frame 叫 dt 好了。
dt <- data.frame(
Y = c(1,1,2,2), X1 = c(0,0,0,0),
X2 = c(1,2,0,1), X3 = c(2,2,1,1)
)
可以利用 length(table(dt$X1)) > 1 這個運算來測試 X1 是不是非全等。
懂這個技巧後,套用 apply(dt, 2, function(.){length(table(.))}) > 1
就可以知道哪些欄是要保留的欄位。
合起來寫就是
dt1 <- dt[, apply(dt, 2, function(.){length(table(.))}) > 1]
dt1 為所求。
: (2)接下來我要對每個X變數做類似這樣的處理
: 舉例: X1
: 0
: 1
: 2
: 1
: 2
: 2
: 1
: 2
: 1
: 1
: 先找出最少的類別,其所佔的比例
: 如X1最少的類別是0,比例為1/10,1/10就是我想得到的,只是迴圈不太明白該怎麼寫
同樣舉例子給你。
dt2 <- data.frame(
X1 = c(0,1,2,1,2,2,1,2,1,1),
X2 = c(0,1,1,1,1,1,1,1,1,2),
X3 = c(0,0,0,0,0,1,1,2,2,2)
)
sort(table(dt2$X1))[1] / length(dt2$X1) 可以看出 0 佔 10% 最少。
所以,再套
apply(dt2, 2, function(.){sort(table(.))[1] / length(.)} )
即為所求。
想看看是誰佔最少則使用
apply(dt2, 2, function(.){attr(sort(table(.))[1], "names")})
不過,dt2$X2 中 0 和 2 都是最少者,但這個方法沒辦法知道。
: (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變數挑出來
Y 是 1,2,3... 怎麼做 logistic regression?
是不是請你再確定?
我建個資料用來示範:
dt <- data.frame(
Y = c(0,0,0,0,0,1,1,1),
X1 = runif(8), X2 = runif(8), X3 = runif(8)
)
n 球中抽出且不放回 k 球的所有組合可以用這個方式:combn(n, k)
因為你的 names(dt) 是 "Y" "X1" "X2" "X3",
那就是 3 球中抽 2 球,共有種情況:
dt.x <- dt[, which(names(dt) != "Y")]
mat <- combn(names(dt.x), 2)
最後再把 mat 拚成 formula 字串:
str <- paste0("Y ~ ", apply(mat, 2, paste, sep = "", collapse = " + "))
就生成三個 formula 前身字串。
最後要做 logistic regression:
mod <- list()
for(i in 1:length(str)){
mod[[i]] <- glm(as.formula(str[i]), data = dt, family = binomial)
}
lapply(mod, summary)
: 希望各位先進能指導指導小弟
: 若問題描述還不夠清楚
: 我會再補充,先跟版上各位先進說聲謝謝了
--
http://apansharing.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.230.77.34
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1429698574.A.64E.html
推
04/22 18:51, , 1F
04/22 18:51, 1F
→
04/22 18:55, , 2F
04/22 18:55, 2F
推
04/22 19:34, , 3F
04/22 19:34, 3F
→
04/22 19:34, , 4F
04/22 19:34, 4F
→
04/23 11:34, , 5F
04/23 11:34, 5F
推
04/24 09:23, , 6F
04/24 09:23, 6F
→
04/24 09:23, , 7F
04/24 09:23, 7F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
0
1
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章