Вот код, чтобы использовать для этого вопроса:отфильтровывать ряды группы, которые не соответствуют критериям
set.seed(1337)
myDT <- data.table(Key1 = sample(letters, 500, replace = TRUE),
Key2 = sample(LETTERS[1:5], 500, TRUE),
Data = sample(1:26, 500, replace = TRUE))
setkey(myDT, Key1, Key2)
# showing what myDT looks like
> myDT
Key1 Key2 Data
1: a A 6
2: a A 3
3: a B 2
4: a B 20
5: a B 13
---
496: z D 23
497: z E 3
498: z E 18
499: z E 11
500: z E 2
Я хотел бы пару вниз myDT
брать только наибольшие значения данных для каждого Key1, Клавишу2 пара. Например. (используя (Key1, Key2) для обозначения пары) для (a, A) Я хотел бы избавиться от строки, где Data равно 3, и сохранить строку, где Data 6. Для (z, E) я хотел бы держите только строку, где данные 18.
При вводе этого вопроса мне пришло решение (которое я опубликую ниже), но, пожалуйста, помогите мне узнать, как вы подходите к этой проблеме.
Это выглядит правильно, но я не могу заставить его закончить. Мои данные имеют 120 тыс. Строк и 64 столбца. Было бы разумно вытащить три столбца, выполнить эту операцию, а затем объединить их обратно? – jks612
Я использовал ссылку, которую вы использовали для эффективной реализации Matt Dowle. Почему эта версия неэффективна? – jks612
@ jks612 '' '' '' .SD' добавляет некоторые накладные расходы, см. Мой ответ и тесты – jangorecki