r语言 - 使用 dplyr::replace_na 将缺少的标识符替换为唯一值



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

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)))

我不知道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 

使用row_number,而不是id::p roquint:

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::p roquint这两种方法都不能保证生成的新 id 在非 NA 行中不存在。

最新更新