У меня есть такой data.frame -
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
Я хочу удалить повторяющиеся строки на основе первых двух столбцов. Ожидаемый результат -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
Я специально ищу решение, использующее dplyr
package.
df %>% group_by(x, y) %>% do(head(.,1))
distinct()
Вот решение с использованием
dplyr >= 0.5
.источник
Для полноты картины также работает следующее:
Однако я предпочитаю использовать решение
distinct
, и подозреваю, что оно быстрее.источник
В большинстве случаев лучшим решением является использование
distinct()
dplyr, как уже предлагалось.Однако вот еще один подход, в котором используется
slice()
функция из dplyr.Отличие от использования
distinct()
функцииПреимущество этого решения состоит в том, что в нем явно указано, какие строки сохраняются из исходного фрейма данных, и оно может хорошо сочетаться с
arrange()
функцией.Предположим, у вас есть данные о продажах клиентов, и вы хотите сохранить по одной записи для каждого покупателя, и вы хотите, чтобы эта запись была записью об их последней покупке. Тогда вы могли написать:
источник
При выборе столбцов в R для сокращенного набора данных вы часто можете получить дубликаты.
Эти две строки дают одинаковый результат. Каждый выводит уникальный набор данных только с двумя выбранными столбцами:
источник
Если вы хотите , чтобы найти строки, которые дублируются вы можете использовать
find_duplicates
сhablar
:источник