我跟踪引文,其中一些引文缺少唯一标识符(PMID)。我想使用dplyr :: replace_na用包{id}中的唯一proqunit替换PMID中的NAs。
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"))
下面的代码用相同的proquint替换PMID中的NA,而不是每个丢失的PMID的预期唯一值。
library(dplyr)
library(tidyr)
library(ids)
refs_with_uniqueID <- refs %>%
mutate(PMID = replace_na(PMID, ids::proquint(n = 1)))
答案 0 :(得分:2)
我不知道dplyr
有replace_na
功能。也许你的意思是tidyr
?来自?tidyr::replace_na
:
replace
:...如果'data'是向量,则使用单个值进行替换。
tidyr::replace_na
用相同的值替换所有NAs。要为每个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
答案 1 :(得分:1)
使用 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_number 和 id :: proquint 都不能保证生成的新ID不存在于非NA行。