Удалить повторяющиеся записи с 4 строками в каждой

Я пытаюсь удалить повторяющиеся элементы из моего фрейма данных.

# A tibble: 12 x 3
       g h         i
   <dbl> <chr> <int>
 1     1 a         1
 2     1 b         2
 3     1 c         3
 4     1 d         4
 5     2 a         5
 6     2 b         6
 7     2 c         7
 8     2 d         8
 9     1 a         9
10     1 b        10
11     1 c        11
12     1 d        12

Но каждый элемент имеет по 4 строки. Я хочу, чтобы он таким и остался.

# A tibble: 8 x 3
      g h         i
  <dbl> <chr> <int>
1     1 a         1
2     1 b         2
3     1 c         3
4     1 d         4
5     2 a         5
6     2 b         6
7     2 c         7
8     2 d         8

Я пробовал distinct () или unique(), но это не сработало.


person Fred    schedule 17.02.2021    source источник


Ответы (2)


Мы можем использовать distinct в столбцах selected.

library(dplyr)
distinct(df1, g, h, .keep_all = TRUE)

-вывод

#  g h i
#1 1 a 1
#2 1 b 2
#3 1 c 3
#4 1 d 4
#5 2 a 5
#6 2 b 6
#7 2 c 7
#8 2 d 8

Или с duplicated

df1[!duplicated(df1[c('g', 'h')]),]

данные

df1 <- structure(list(g = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 
1L, 1L), h = c("a", "b", "c", "d", "a", "b", "c", "d", "a", "b", 
"c", "d"), i = 1:12), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
person akrun    schedule 17.02.2021

Другой вариант — использовать метод unique S3 для объекта data.table:

library(data.table)

unique(
  data.table(dat),
  by = c('g', 'h')
)

#    g h i
# 1: 1 a 1
# 2: 1 b 2
# 3: 1 c 3
# 4: 1 d 4
# 5: 2 a 5
# 6: 2 b 6
# 7: 2 c 7
# 8: 2 d 8

Данные

dat <- structure(
  list(
    g = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L),
    h = c("a", "b", "c", "d", "a", "b", "c", "d", "a", "b", "c", "d"),
    i = 1:12
    ),
  row.names = c(NA,-12L),
  class = c("tbl_df", "tbl", "data.frame")
)
person utubun    schedule 17.02.2021