【问题标题】:Replace missing identifier with a unique value using dplyr::replace_na使用 dplyr::replace_na 将缺少的标识符替换为唯一值
【发布时间】:2018-11-02 10:17:10
【问题描述】:

我正在跟踪引用,其中一些缺少唯一标识符 (PMID)。我想使用 dplyr::replace_na 用 package{ids} 中的唯一 proquunit 替换 PMID 中的 NA。

refs <- structure(list(Author = c("Aubrey", "Azrin", "Azrin", "Azrin", 
"Azrin", "Szapocznik"), Year = c(1998L, 1994L, 1996L, 1994L, 
2001L, 2003L), PMID = c(NA, NA, 8561763L, 7993330L, NA, 23731415L
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))

下面的代码将 PMID 中的 NA 替换为相同的 proquint,而不是每个缺失的 PMID 的预期唯一值。

library(dplyr)
library(tidyr)
library(ids)

    refs_with_uniqueID <- refs %>% 
      mutate(PMID = replace_na(PMID, ids::proquint(n = 1)))

【问题讨论】:

    标签: r dplyr tidyr uniqueidentifier


    【解决方案1】:

    我不知道dplyr 有一个replace_na 函数。也许你的意思是tidyr?来自?tidyr::replace_na

    replace: ...如果“数据”是一个向量,则用于替换的单个值。

    tidyr::replace_na 用相同的值替换所有 NA。要为每个 NA 使用唯一值,请尝试

    set.seed(123)
    refs %>% 
      mutate(PMID = replace(PMID, is.na(PMID), ids::proquint(n = sum(is.na(PMID)))))
    # # A tibble: 6 x 3
    #   Author      Year PMID       
    #   <chr>      <int> <chr>      
    # 1 Aubrey      1998 hokiv-solav
    # 2 Azrin       1994 kofuf-vamat
    # 3 Azrin       1996 8561763    
    # 4 Azrin       1994 7993330    
    # 5 Azrin       2001 zagaf-bovon
    # 6 Szapocznik  2003 23731415 
    

    【讨论】:

      【解决方案2】:

      使用 row_number,而不是 id::proquint:

      library(dplyr)
      
      refs_with_uniqueID <- refs %>% 
        mutate(PMID = if_else(is.na(PMID),
                              paste0("uid_", row_number()),
                              as.character(PMID)))
      refs_with_uniqueID
      # # A tibble: 6 x 3
      #    Author      Year PMID    
      #   <chr>      <int> <chr>   
      # 1 Aubrey      1998 uid_1   
      # 2 Azrin       1994 uid_2   
      # 3 Azrin       1996 8561763 
      # 4 Azrin       1994 7993330 
      # 5 Azrin       2001 uid_5   
      # 6 Szapocznik  2003 23731415
      

      注意:两种方法,row_numberid::proquint,都不能保证生成的新 id 不存在于非NA 行。

      【讨论】:

        猜你喜欢
        • 2022-11-27
        • 2013-11-19
        • 2019-08-05
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2014-02-15
        相关资源
        最近更新 更多