R:根据连续变量从分类变量创建新的分类变量

R: create a new categorical variable from a categorical variable based on a continuous variable

我已经看过here,其中使用了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 列的基础上创建第三列,形成一个新类别。在这个例子中,我怎样才能使例如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])
)

这有点乱七八糟,但它确实有效:

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 的 bin 对 cumsum 进行分类的方法(-1 以包括总和恰好为 5 的行),我将其用作索引以获取Nber_within_category < 5

行的新类别

如果您 运行 :

可能更容易理解列 tmp 的定义
x <- 1:100
data.frame(x, y = floor((x- 1)/5))