Мы можем использовать duplicated
для создания логического индекса и использовать его для подстановки строк
df2 <- data.frame(col3. = df$col.1[!duplicated(df$col.2)])
Или с subset
subset(df, !duplicated(col.2), select = col.1)
Или с dplyr
, используйте distinct
на col.2
, а затем select
'col.1'
library(dplyr)
df %>%
distinct(col.2, .keep_all = TRUE) %>%
select(col.3 = col.1)
# col.3
#1 1
#2 1
#3 1
#4 2
#5 2
Если дубликаты рассматриваются на основе равенства между смежными элементами, тогда используйте rleid
library(data.table)
df %>%
filter(!duplicated(rleid(col.2))) %>%
select(col.3 = col.1)
Если мы конвертируем в data.table
, unique
также имеет опцию by
library(data.table)
unique(setDT(df), by = 'col.2')[, .(col.3 = col.1)]
data
df <- structure(list(col.1 = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), col.2 = c(1L,
3L, 7L, 7L, 12L, 14L, 14L)), class = "data.frame", row.names = c(NA,
-7L))