Замените отсутствующий идентификатор уникальным значением, используя dplyr :: replace_na - PullRequest
0 голосов
/ 23 мая 2018

Я отслеживаю цитаты, в некоторых из которых отсутствует уникальный идентификатор (PMID).Я хотел бы заменить NA в PMID на уникальный proqunit из пакета {ids}, используя dplyr :: replace_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"))

Приведенный ниже код заменяет NA в PMID с тем же proquint, а не с намеченнымуникальное значение для каждого отсутствующего PMID.

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

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

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Использование 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 не будут гарантировать, что сгенерированные новые идентификаторы еще не существуют в строках, отличных от NA.

0 голосов
/ 23 мая 2018

Я не знаю, что dplyr имеет функцию replace_na.Возможно, вы имеете в виду tidyr?tidyr::replace_na:

replace: ... Если 'data' - вектор, для замены используется одно значение.

tidyr::replace_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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...