Допустим, у меня есть data.table
какФильтр data.table по количеству группы
sample<-data.table(id=c(1,1,2,2,3,3,3,4,4),
name=c("apple","apple","orange","orange",
"pear","pear","pear","banana","banana"),
atr=c("pretty","ugly","bruised","delicious",
"pear-shaped","bruised","infested",
"too-ripe","perfect"),
N=c(10,9,15,4,5,7,7,4,12))
Я хочу вернуться в основном unique(sample[,list(id, name)])
кроме того, что я также хочу atr
столбец значения с наибольшим N. В тех случаях, когда есть связь для самого высокого N, тогда мне все равно, какая из двух выбрана, но я хочу, чтобы только один был выбран.
Это почти работает merge(sample[,list(N=max(N)),by=list(id,name1)], sample,by=c("id","name1","N"))
, но поскольку груша имеет два значения, которые связывают для максимального, это возвращает две груши. Кроме того, что он не дает ожидаемого результата, я также предполагаю/надеюсь, что есть способ сделать это, не связанный с объединением.
Я не знал, что уникальная принятая 'by'. Я также был удивлен, что это было быстрее, чем подход Ричарда. Конечно, это была разница между .001 и .005 секунд (для моего фактического набора данных), поэтому он не имеет никакого реального влияния на мир. –
@DeanMacGregor да, аргумент 'by' особенно полезен, если: a) вы хотите, чтобы ваш оригинальный ключ' data.table' был неповрежденным при использовании 'unique' и b), если вы хотите пойти' unique' на некоторые, но не все ключи вашей 'data.table'. – MichaelChirico
Делает мне желание по аргументу в голове и хвосте –