dplyr 中的不同不起作用(有时)

Dav*_*vid 1 r dplyr tibble

我有以下从计数中获得的数据框。我曾经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
Run Code Online (Sandbox Code Playgroud)

现在我想对过程进行区分,只保留第一个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
Run Code Online (Sandbox Code Playgroud)

这是行不通的。奇怪的...

www*_*www 7

如果我们打印该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
Run Code Online (Sandbox Code Playgroud)

解决方法之一是降低因子水平。我们可以使用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
Run Code Online (Sandbox Code Playgroud)