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中的任何其他包)
更新:使用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
将前两个结合到low
bin中,并将第三个bin(因此< 3
)留在high
bin中.