2014-08-28 87 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