使用R(dplyr)将三元组转换为二进制

use*_*287 2 binary r dataframe dplyr

我有一个像这样的大型data.frame(df):

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 
Run Code Online (Sandbox Code Playgroud)

我想通过在R中使用dplyr创建一个B列的三分位组,并使用以下代码:

第一

library('dplyr')
ntile(df$B, 3)
Run Code Online (Sandbox Code Playgroud)

所以我从B栏得到三组:

#group 1
ntile(df$B,3)==1
#group2
ntile(df$B,3)==2
#group3
ntile(df$B,3)==3
Run Code Online (Sandbox Code Playgroud)

现在我想通过将组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)
Run Code Online (Sandbox Code Playgroud)

我只是想确定我是否做得对(第一和第二部分)?我想知道是否还有其他(更快/更容易)的方法吗?通过使用(dplyr或R中的任何其他包)

Bro*_*ieG 5

更新:使用dplyr:

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

生产:

    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
Run Code Online (Sandbox Code Playgroud)

老底座解决方案

通常你会用到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
Run Code Online (Sandbox Code Playgroud)

生产:

    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
Run Code Online (Sandbox Code Playgroud)

cut生成一个将每个值分类为bin的因子,这里我们将这些bin指定为具有该函数的terciles quantile.然后我们利用有序因子的性质df$ter将前两个结合到lowbin中,并将第三个bin(因此< 3)留在highbin中.