Ответ 1
Вы можете проверить unique
функцию.
> v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
> unique(v)
[1] 1 5 2 6 3
У меня есть вектор с повторяющимися элементами и хотел бы удалить их так, чтобы каждый элемент появлялся только один раз.
В Python я мог бы построить Set
из вектора для достижения этого, но как я могу это сделать в R?
Вы можете проверить unique
функцию.
> v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
> unique(v)
[1] 1 5 2 6 3
Это делает то же самое. Медленнее, но полезно, если вам также нужен логический вектор дубликатов:
v[duplicated(v)]
Чтобы удалить только смежные дублированные элементы, вы можете сравнить вектор со смещенной версией самого себя:
v <- c(1, 1, 5, 5, 5, 5, 2, 2, 6, 6, 1, 3, 3)
v[c(TRUE, !v[-length(v)] == v[-1])]
[1] 1 5 2 6 1 3
То же самое можно написать немного более элегантно, используя dplyr:
library(dplyr)
v[v != lag(v)]
[1] NA 5 2 6 1 3
NA, возвращаемый lag(), удаляет первое значение, чтобы сохранить первое значение, вы можете изменить значение по умолчанию на значение, которое будет отличаться от первого значения.
v[v != lag(v, default = !v[1])]
[1] 1 5 2 6 1 3