提问人:Olaf Odinn 提问时间:9/20/2023 最后编辑:user438383Olaf Odinn 更新时间:9/20/2023 访问量:25
dplyr 按具有多个阈值的组对行进行子集
dplyr Subsetting rows by groups with multiple thresholds
问:
我目前正在尝试回答一个相当简单的问题:列出每个地区排名前 20% 的药店(以单位衡量)。
我首先测量了每家药房销售的产品数量,对其进行了 DESC 排序,并有以下 20% 的阈值:
以下是我计算数字的方式:
spad_number <- c_spad_results %>%
group_by(province)%>%
summarise(tot_pharma = n())
View(spad_number)
spad_number_20_threshold <- spad_number %>%
mutate(Top_20_threshold = round(tot_pharma*0.20))%>%
dplyr::select(Top_20_threshold,province)
给我这个结果数据帧
花絮:4×2
Top_20_threshold省
1 248 柏林
2 38 热那亚
3 27 伦敦
4 42 都灵
现在我想得到一个数据帧,我只得到前 20%,想不出比这更好的解决方案:
top_20_pharma <- ranked_pharmas %>%
group_by(province) %>%
slice(1:spad_number_20_threshold$Top_20_threshold)
View(top_20_pharma)
并得到我不断遇到的问题
警告消息: 1:1:spad_number_20_threshold$Top_20_threshold : 数值表达式有 4 个元素:仅使用第一个元素 2: In 1:spad_number_20_threshold$Top_20_threshold : 数值表达式有 4 个元素:仅使用第一个元素 3: 以 1:spad_number_20_threshold$Top_20_threshold 为单位: 数值表达式有 4 个元素:仅使用第一个元素 4: In 1:spad_number_20_threshold$Top_20_threshold : 数值表达式有 4 个元素:仅使用第一个元素
如何确保根据每个区域正确选择我的ranked_pharmas数据帧行,而不仅仅是读取数据帧的第一个值。
非常感谢您的任何帮助!!
最佳:)
我本来以为会得到 248 家柏林、38 家热那亚、27 家伦敦和 42 家药店,但超过了双倍。 我已经尝试了过滤器功能
#filter(row_number(desc(total_units)) <= first(spad_number_20_threshold$Top_20_threshold))
但它也只读取第一个值 248,每组给出 248 个药房。这里缺少像 excel 的 Vlookup 这样的东西,但我对 R 没有足够的经验:/
答:
不确定c_spad_results的结构,但我相信如果数据集排列好,可能会解决您的问题。slice_head
c_spad_results |>
group_by(province) |>
slice_head(prop = 0.2)
评论