r - 分组并保留在不同列中具有最大值的整行
问题描述
我有一个看起来像的df:
# Groups: telefono1 [360]
nombre telefono1 telefono2 ads_ao ads_am ads_mas ads_ma total_price_ao total_price_am total_price_mas~ total_price_ma
<chr> <chr> <lgl> <chr> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
1 CRIST~ 60***0400 NA 0 0 0 0 0 0 0 0
2 CRIST~ 60***0400 NA 0 61 0 0 0 0 0 0
3 CRIST~ 60***0400 NA 0 0 0 0 0 0 0 0
4 DIEGO~ 60***0844 NA 0 0 0 0 0 0 0 0
5 Diego 60***0844 FALSE 0 0 0 2 0 0 0 22500
6 TALLE~ 60***4848 NA 2 0 0 0 59000 0 0 0
7 TALLE~ 60***4848 NA 0 311 0 0 0 0 0 0
8 Rub?n 60***4848 FALSE 0 0 0 2 0 0 0 59000
我需要按 Telefono1 分组,然后保留整行,其中跨列“ads_ao、ads、am、ads_mas 和 ads_ma”的值为最大值。
在示例中,正确的解决方案是行#2、#5 和#7,因为它们是按telefono1 分组的行,它们在提到的列中具有最大值。
我用 dplyr 试过了
group_by(telefono1) %>%
mutate(max_value = max(ads_ao, ads_am, ads_mas, ads_ma)) %>%
ungroup()
但是通过这种方法,我在所有行中都得到了一个具有最大值的新变量,然后我不能使用 top_n() 来获取具有最大值的行,因为所有行都是相等的。
请问有人知道有什么解决办法吗?谢谢!!
解决方案
一个dplyr
选项purrr
可能是:
df %>%
group_by(telefono1) %>%
slice_max(pmap_dbl(across(starts_with("ads")), max), 1)
nombre telefono1 telefono2 ads_ao ads_am ads_mas ads_ma total_price_ao total_price_am total_price_mas. total_price_ma
<chr> <int> <lgl> <int> <int> <int> <int> <int> <int> <int> <int>
1 CRIST~ 600040400 NA 0 61 0 0 0 0 0 0
2 Diego 600530844 FALSE 0 0 0 2 0 0 0 22500
3 TALLE~ 600674848 NA 0 311 0 0 0 0 0 0
推荐阅读
- node.js - Cpanel 中的角度 SSR 部署
- vue.js - 如何从Vue中动态添加的元素调用方法
- android - 使用列表视图选定项目设置布局 - Android
- reactjs - 将变量从 Stack 传递到 BottomTab 导航器
- amazon-web-services - 使用 Amazon EC2 的 Webhook
- typescript - 冰沙图表用电子 vuejs 显示为空
- javascript - 如何部分更新 MongoDB 中的字段,以便新字段将一些文本添加到现有记录
- parallel-processing - 如何将 numactl 与 slurm 一起使用?
- java - android(Rest Api)中每行中带有接受和拒绝请求按钮的列表视图
- c# - IdentityServer 4 使用用户名或电话号码登录