2014-08-28 84 views
2

我有一個大data.frame(DF)這樣轉換三分位數爲二進制:通過使用R(dplyr)

A B C D E 
1.2 2.2 3.3 4.4 5.2 
4.2 5.3 6.5 7.2 1.5 
2 7 3 4 6 
1 2 3 4 5 

,我想通過R中使用dplyr能夠創建列B的三分位數組驗證碼:

首先

library('dplyr') 
ntile(df$B, 3) 

於是,我從B列三組:

#group 1 
ntile(df$B,3)==1 
#group2 
ntile(df$B,3)==2 
#group3 
ntile(df$B,3)==3 

現在我想通過加入組1,2來生成二進制變量成爲一個組,並且組3成爲第二組。 我應用這個代碼:

#combine group1,2 
bin1 <- c((ntile(df$B,3)==1),(ntile(df$B,3)==2)) 
#creating the second group 
bin2 <- (ntile(df$B,3)==3) 

我只是想確保,如果我這樣做是正確與否(在第一和第二部分)?我想知道是否有其他(更快/更容易)的方法來做到這一點?通過使用(dplyr或R中的任何其它封裝)

回答

4

UPDATE:使用dplyr

library(dplyr) 
df %>% mutate(ter=ntile(B, 3), bin=ifelse(ter < 3, "low", "high")) 

產地:

A B C D E ter bin 
1 1.2 2.2 3.3 4.4 5.2 1 low 
2 4.2 5.3 6.5 7.2 1.5 2 low 
3 2.0 7.0 3.0 4.0 6.0 3 high 
4 1.0 2.0 3.0 4.0 5.0 1 low 

OLD鹼溶液

通常你使用cut這種類型的東西。我不知道ntile其實你想要做什麼:

df$ter <- cut(df$B, quantile(df$B, seq(0, 1, 1/3)), include.lowest=T) 
df$bin <- ifelse(as.numeric(df$ter) < 3, "low", "high") 
df 

產地:

A B C D E  ter bin 
1 1.2 2.2 3.3 4.4 5.2 [2,2.2] low 
2 4.2 5.3 6.5 7.2 1.5 (2.2,5.3] low 
3 2.0 7.0 3.0 4.0 6.0 (5.3,7] high 
4 1.0 2.0 3.0 4.0 5.0 [2,2.2] low 

cut生成每個值分類成箱的一個因素,在這裏,我們指定的垃圾箱作爲與terciles功能quantile。然後我們利用df$ter的有序因子性質將前兩個綁定合併到low bin中,並將第三個bin(因此< 3)保留爲high bin。

+0

謝謝BrodieG!這非常有用;我知道切割功能,但我決定專注於dplyr。我比較了cut和ntile的輸出,我注意到它們是相似的。 – user3576287 2014-08-28 13:12:12

+1

@ user3576287,請參閱編輯。 – BrodieG 2014-08-28 13:23:04