【问题标题】:Filtering only one of a list of unique values using dplyr使用 dplyr 仅过滤唯一值列表中的一个
【发布时间】:2020-10-14 17:24:26
【问题描述】:

好的,所以我在 R 中有如下数据框:

df <- structure(list(Job_Bin = c("EXECUTIVE", 
"EXECUTIVE", "EXECUTIVE", 
"STAFF ASSISTANTS", "STAFF ASSISTANTS", 
"STAFF ASSISTANTS", "STAFF ASSISTANTS", 
"STAFF ASSISTANTS", "BARREL RIDER", 
"BARREL RIDER"), Code = c("101", 
"101", "101", "102", "102", "102", "102", "102", "103", "103"
)), row.names = c(NA, 10L), class = "data.frame")

这是一个查找表,基本上我只想提取 Code 的第一个实例。

最终目标:

Job_Bin             Code
EXECUTIVE           101
STAFF ASSISTANTS    102
BARREL RIDER        103

如果可能的话,我想使用 dplyr/tidyverse 来做到这一点。

我尝试使用以下方法,但返回错误:

df %>% 
  filter(unique(Code))

Error: Problem with `filter()` input `..1`.
x Input `..1` must be of size 422 or 1, not size 120.
i Input `..1` is `unique(Code)`.

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    我们可以从dplyr使用distinct

    library(dplyr)
    df %>% 
        distinct
    

    如果基于单列

    df %>%
    
       distinct(Job_Bin, .keep_all = TRUE)
    #           Job_Bin Code
    #1        EXECUTIVE  101
    #2 STAFF ASSISTANTS  102
    #3     BARREL RIDER  103
    

    unique 在基础 R`中

    unique(df)
    

    【讨论】:

    • @JohnThomas 和 tidyverse,这是规范的方式。谢谢
    【解决方案2】:

    试试这个base R 解决方案:

    #Code
    dfnew <- df[!duplicated(df$Job_Bin),]
    

    或者:

    library(dplyr)
    #Code 2
    dfnew <- df %>% filter(!duplicated(Job_Bin))
    

    两种情况下的输出:

               Job_Bin Code
    1        EXECUTIVE  101
    2 STAFF ASSISTANTS  102
    3     BARREL RIDER  103
    

    【讨论】:

    • 当然,但是 dplyr?
    • @JohnThomas 添加了dplyr 的更新。希望有帮助!
    【解决方案3】:

    df %>% distinct(Job_Bin, Code, .keep_all = TRUE)

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2021-10-17
      • 2021-05-20
      相关资源
      最近更新 更多