【问题标题】:Convert tertiles to binary by using R (dplyr)使用 R (dplyr) 将三分位数转换为二进制
【发布时间】:2014-08-28 11:46:28
【问题描述】:

我有一个像这样的大型 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 

我想通过在 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 中的任何其他包)

【问题讨论】:

    标签: r dataframe binary dplyr


    【解决方案1】:

    更新:使用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
    

    旧基础解决方案

    通常你使用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 生成一个因子,将每个值分类到一个 bin 中,这里我们使用函数 quantile 将 bin 指定为 terciles。然后我们利用df$ter 的有序因子性质将前两个绑定合并到low bin 中,并将第三个bin(因此&lt; 3)留在high bin 中。

    【讨论】:

    • 感谢 BrodieG!这真的很有用;我知道 cut 功能,但我决定专注于 dplyr。我比较了 cut 和 ntile 输出,发现它们很相似。
    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2015-01-21
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多