Отличный в dplyr не работает (иногда) - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующий фрейм данных, который я получил из подсчета.Я использовал dput, чтобы сделать фрейм данных доступным, а затем отредактировал фрейм данных, чтобы получить дубликат A.

df <- structure(list(Procedure = structure(c(4L, 1L, 2L, 3L), .Label = c("A", "A", "C", "D", "-1"), 
                                         class = "factor"), n = c(10717L, 4412L, 2058L, 1480L)), 
              class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L), .Names = c("Procedure", "n"))

print(df)

# A tibble: 4 x 2
  Procedure     n
  <fct>     <int>
1 D         10717
2 A          4412
3 A          2058
4 C          1480

Теперь я хотел бы разобраться с процедурой и оставить только первое A.

df %>% 
  distinct(Procedure, .keep_all=TRUE)

# A tibble: 4 x 2
  Procedure     n
  <fct>     <int>
1 D         10717
2 A          4412
3 A          2058
4 C          1480

Не работает.Странно ...

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Если мы напечатаем столбец Procedure, мы увидим, что есть дублированные уровни для a, что проблематично для функции distinct.

df$Procedure
[1] D A A C
Levels: A A C D -1
Warning message:
In print.factor(x) : duplicated level [2] in factor

Один из способов исправить этосбросить уровни факторов.Мы можем использовать функцию factor для достижения этой цели.Другой способ - преобразовать столбец Procedure в символ.

df <- structure(list(Procedure = structure(c(4L, 1L, 2L, 3L), .Label = c("A", "A", "C", "D", "-1"), 
                                           class = "factor"), n = c(10717L, 4412L, 2058L, 1480L)), 
                class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L), .Names = c("Procedure", "n"))


library(tidyverse)

df %>% 
  mutate(Procedure = factor(Procedure)) %>%
  distinct(Procedure, .keep_all=TRUE)
# # A tibble: 3 x 2
#   Procedure     n
#   <fct>     <int>
# 1 D         10717
# 2 A          4412
# 3 C          1480
0 голосов
/ 15 февраля 2019

У вас есть дублированное значение в параметре метки .Label = c («A», «A», «C», «D», «-1»).Это проблема.Кстати, ваш способ инициализации тиббла кажется очень странным (я точно не знаю вашу цель, но все же)

Почему бы не использовать


df <- tibble(
    Procedure = c("D", "A", "A", "C"),
    n = c(10717L, 4412L, 2058L, 1480L)
)

...