我已经看过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])
)
答案 0 :(得分:1)
有点hack,但是可以用:
<ion-router-outlet></ion-router-outlet>
第df %>%
mutate(tmp = floor((cumsum(Nber_within_category) - 1)/5)) %>%
mutate(new_category = ifelse(Nber_within_category >= 5,
Category,
letters[tmp+1]))
行是对大小为5的垃圾箱(-1包括总和正好为5的行)进行分类的一种方式,我将其用作索引以获取新类别对于floor((cumsum(Nber_within_category) - 1)/5)
如果您运行以下命令,可能更容易理解Nber_within_category < 5
列的定义方式:
tmp