У меня есть data.table
и нужно сделать некоторые очистки для нескольких значений, которые должны быть уникальными - упрощенный пример должен помочь:Выбор не являющихся `значения NA` из повторяющихся строк с` data.table`
> DT
id type
1: 1 A
2: 2 X
3: 3 X
4: 3 G
5: 3 NA
6: 4 D
7: 5 NA
проблема у меня есть несколько значений для «типа» за те же ID, или:
> DT[id == 3]
id type
1: 3 X
2: 3 G
3: 3 NA
источник множество значений не имеет значения, но я хотел бы, чтобы очистить это определенным образом: взять последний сообщил значение, если оно не является NA
. Таким образом, очистка должна привести к одной строке на ID, а в примере дело будет выглядеть следующим образом:
> DTclean
id type
1: 1 A
2: 2 X
3: 3 G
4: 4 D
5: 5 NA
Мой текущий подход сортировать DT
по type
, так что все NA
«s являются первым, а затем используйте duplicated
- это приемлемо, но я считаю, что есть лучший метод, плюс, хотя это и не имеет решающего значения, это не всегда берет последнее сообщенное значение. В приведенном выше случае X вместо G.
Это мой текущий подход:
> setorder(DT, type)
> DTclean <- DT[!duplicated(id, fromLast = T)]
> DTclean
id type
1: 1 A
2: 2 X
3: 3 X
4: 4 D
5: 5 NA
Любые идеи/помощь будут высоко оценены!
Ваш путь кажется прекрасным для меня. Можете ли вы опубликовать этот пример воспроизводимым способом (например, используя 'dput')? – Frank
Кроме того, повторное лечение NA, этот вопрос очень похож на http://stackoverflow.com/q/40097041/ – Frank
@Frank - извинения, добавил ваш очень разумный запрос в пользу других – daRknight