[英]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.