繁体   English   中英

R:基于连续变量从分类变量创建新的分类变量

[英]R: create a new categorical variable from a categorical variable based on a continuous variable

我已经在这里查看了使用cut函数的地方。 但是,鉴于我的情况,我无法提出一个聪明的解决方案。

首先,我当前拥有一些示例数据:

df <- data.frame(Category = LETTERS[1:20]
                 , Nber_within_category = c(rep(1,8), rep(2,3), rep(6,2), rep(10,3), 30, 50, 77, 90)
                 )

我想根据Nber_within_category列创建构成新类别的Nber_within_category列。 在此示例中,我如何制作例如Category_new ,以便在每个类别中Nber_within_category至少为5,并限制如果Category已经具有Nber_within_category >= 5 ,则采用原始类别。

因此,例如,它应如下所示:

df <- data.frame(Category = LETTERS[1:20]
                 , Nber_within_category = c(rep(1,8), rep(2,3), rep(6,2), rep(10,3), 30, 50, 77, 90)
                 , Category_new = c(rep('a',5), rep('b', 4), rep('c',2), LETTERS[12:20])
)

这有点hack,但是可以用:

df %>% 
  mutate(tmp = floor((cumsum(Nber_within_category) - 1)/5)) %>% 
  mutate(new_category = ifelse(Nber_within_category >= 5,
                               Category,
                               letters[tmp+1]))

floor((cumsum(Nber_within_category) - 1)/5)是一种对大小为5的垃圾箱(-1包括总和正好为5的行)进行分类的方式,我将其用作索引以获取Nber_within_category < 5的行的新类别

如果运行以下命令,可能更容易理解如何定义tmp列:

x <- 1:100
data.frame(x, y = floor((x- 1)/5))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM