r - 每行中具有最大数量的标志行
问题描述
受这个问题的启发,我想知道如何按组标记具有最大数量的行,同时保留所有其他行,而不是删除它们?
Value
可以说我想为每个ID
单独寻找最大值。然后用 标记最大行,用 标记1
所有其他行0
。
所以,基本上从中得到:
ID <- c(1,1,1,2,2,2,2,3,3)
Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,1,2,1,2,2,2)
DF <- data.table(cbind(ID, Value, Event))
DF
ID Value Event
1: 1 2 1
2: 1 3 1
3: 1 5 2
4: 2 2 1
5: 2 5 2
6: 2 8 1
7: 2 17 2
8: 3 3 2
9: 3 5 2
对此:
DF
ID Value Event flagMAX
1: 1 2 1 0
2: 1 3 1 0
3: 1 5 2 1
4: 2 2 1 0
5: 2 5 2 0
6: 2 8 1 1
7: 2 17 2 1
8: 3 3 2 0
9: 3 5 2 0
如何才能做到这一点?理想情况下data.table
我试过了 :
DF[,flagMAX := ifelse(max(Value), 1, 0), by = "ID"]
但得到所有1
有任何想法吗?
解决方案
如果您接受答案tidyverse
library(tidyverse)
ID <- c(1,1,1,2,2,2,2,3,3)
Value <- c(2,3,5,2,5,8,17,3,5)
Event <- c(1,1,2,1,2,1,2,2,2)
DF <- data.frame(cbind(ID, Value, Event))
DF %>%
group_by(ID) %>%
mutate(flag = ifelse(Value == max(Value), 1,0))
#> # A tibble: 9 x 4
#> # Groups: ID [3]
#> ID Value Event flag
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 2 1 0
#> 2 1 3 1 0
#> 3 1 5 2 1
#> 4 2 2 1 0
#> 5 2 5 2 0
#> 6 2 8 1 0
#> 7 2 17 2 1
#> 8 3 3 2 0
#> 9 3 5 2 1
推荐阅读
- amazon-web-services - 如何从 Lambda 内部测试 GET 和 POST 调用
- regex - 如何多次找到一个组
- c++ - Kattis Putovanje 帮助 C++
- c# - 仅删除/处置 DataGridView c# 中的特定单元格
- dynamics-crm - Dynamics 365 CRM 报告
- c# - 如何从 JWT 声明中识别登录是否来自 Microsoft(个人)帐户?
- c# - 在 c# 应用程序中将数据存储为表
- python - 如何在 Django 中定期更新后台任务状态?
- javascript - 我想做一个像向下钻取一样的切换按钮
- ansible - 在 Ansible 中使用 expect 并在 Shell 模块中发送时发送无法正常工作