【发布时间】:2020-07-08 17:44:53
【问题描述】:
受this question 的启发,我想知道如何按组标记具有最大数量的行,同时保留所有其他行,而不是删除它们?
假设我想分别为每个 ID 查找 Value 中的最大值。然后用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
有什么想法吗?
【问题讨论】:
-
我认为第 6 个值应该是 0,因为值是 17 而不是 8 的最大值
-
ifelse() 采用逻辑向量...检查 ?ifelse.
标签: r if-statement data.table