【发布时间】:2018-03-07 19:40:49
【问题描述】:
我想做这样的事情:
How to make a unique in R by column A and keep the row with maximum value in column B
除了我的data.table 有一个键列和多个值列。所以说我有以下内容:
a b c
1: 1 1 1
2: 1 2 1
3: 1 2 2
4: 2 1 1
5: 2 2 5
6: 2 3 3
7: 3 1 4
8: 3 2 1
如果键是列a,我希望为每个唯一的a 返回最大b 的行,如果有多个唯一的最大值b,则获取最大的行c 等多个列。所以结果应该是:
a b c
1: 1 2 2
2: 2 3 3
3: 3 2 1
我还希望对任意数量的列执行此操作。因此,如果我的 data.table 有 20 列,我希望按从左到右的顺序应用 max 函数。
【问题讨论】:
-
是的,抱歉,我修好了。
-
好的,谢谢。我猜某处有骗子,但
DT[order(b,c), .SD[.N], by=a]有效。 -
酷,有没有一种方法可以对任意数量的列进行通用处理?这仅在我知道列是什么并且可以按名称调用它们的情况下才有效。但我正在尝试编写一个通用函数来执行此操作。
-
嗯,有
cols = c("b","c"); setorderv(DT, cols); DT[, .SD[.N], by=a],尽管这实际上会修改您的数据。我找不到骗子,而且我的想法(排序)似乎效率很低。也许其他人会有一个想法。顺便说一句,DT[, .SD[.N], by=a]的替代品是unique(DT, by="a", fromLast=TRUE),如果它是您的关键列,您可以写key(DT)代替“a”。
标签: r data.table