r - 根据优先级分配资源
问题描述
我想assign
基于rank
和创建limit
列group
。特别是,对于每个组,我都有一个优先级(例如,1、2、3 或 1、3、6 或 3、4、5 等)。根据排名(小数字优先),我想分配limit
列中给出的资源。现在我正在手动执行此操作。但我想用tidyverse
. 我如何通过mutate
and group_by
(或其他方法)分配?
解决方案
使用tidyverse
,您可以top_n
在分组后使用。这将根据rank
- 在每个组中保留的 n 由 决定过滤最高值limit
。保留的将被分配 1,然后与您的原始数据合并。
让我知道这是否提供了预期的结果。
library(tidyverse)
df %>%
group_by(group) %>%
top_n(limit[1], desc(rank)) %>%
mutate(assign = 1) %>%
right_join(df) %>%
replace_na(list(assign = 0)) %>%
arrange(group, rank)
输出
group rank limit assign
<chr> <dbl> <dbl> <dbl>
1 A 1 1 1
2 A 2 1 0
3 A 3 1 0
4 B 1 1 1
5 B 3 1 0
6 B 6 1 0
7 C 3 2 1
8 C 4 2 1
9 C 5 2 0
10 C 6 2 0
数据
df <- structure(list(group = c("A", "A", "A", "B", "B", "B", "C", "C",
"C", "C"), rank = c(1, 2, 3, 1, 3, 6, 3, 4, 5, 6), limit = c(1,
1, 1, 1, 1, 1, 2, 2, 2, 2)), class = "data.frame", row.names = c(NA,
-10L))
推荐阅读
- vba - 即使没有满足 if-criteria 的 Excel VBA 执行私有子
- symfony - 教义 - 共同属性上的匹配实体(OneToMany 和 ManyToMany)
- python - pyc 文件和密码的安全性?
- rest - 服务器返回状态 200 但客户端没有收到它,因为网络连接断开
- microsoft-graph-api - 使用 Graph API 获取 SharePoint 组(不是 AD 组)
- arrays - 我如何在功能上将对象数组转换为不同的结构
- spring-data-jpa - 创建一个不是表spring jpa的实体
- android - 在 Android 中对从网络下载的图像进行着色
- extjs - 当组件中不存在 ItemId 时,如何使用唯一 ID 从 ext 脚本更新 HTML
- angular - 无法在 Angular 6 中使用 subscribe() 方法之外的获取数据