微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R 中的性别包中没有找到性别而获得“NA”

如何解决在 R 中的性别包中没有找到性别而获得“NA”

我想知道如何获取无法使用性别包处理的所有值。请看下面的代码

library(gender)
test = tibble::tribble(
              ~Name1,"Peter","Susan","Nuernberg","Test","Heiko","He"
         )
test$Name1 <- as.character(test$Name1) 
genderpred = gender(test$Name1,method = "ssa")

reprex package (v2.0.0) 于 2021 年 6 月 3 日创建

如您所见,genderpred 不包含未知性别。我怎样才能用'NA'将它们放入矩阵中。

感谢您的帮助!

解决方法

给定 test 作为名称的“矩阵”(实际上是 tibble),您可以简单地使用 dplyr::right_join() 如下

library(gender)
library(dplyr)

# ...
# Your code to get the 'test' dataset of names.
# ...

# Consolidate any names (Name1,Name2,...) into a single column.
consolidated <- data.frame(all_names = as.character(as.vector(as.matrix(test))))

# Get the gender predictions.
genderpred <- gender(consolidated$all_names,method = "ssa")

# Perform the join using the consolidated names.
genderpred <- genderpred %>%
  right_join(consolidated,by = c("name" = "all_names"))

获得您想要的 genderpred 结果,例如:

  name    proportion_male proportion_female gender year_min year_max
  <chr>             <dbl>             <dbl> <chr>     <dbl>    <dbl>
1 Peter            0.995             0.0053 male       1985     1985
2 Susan            0.0067            0.993  female     1985     1985
3 Nuernberg       NA                NA      NA           NA       NA
4 Test            NA                NA      NA           NA       NA
5 Heiko           NA                NA      NA           NA       NA
6 He              NA                NA      NA           NA       NA

通过使用 right_join,您可以包含所有来自 test 的名称:不仅仅是那些在 name 中具有匹配 genderpred 的名称。当这样的名称(如 "Nuernberg")没有匹配项时,它会填充一个新的“空白”行(用 NA 填充)。

可以在 here 中找到 dplyrjoin 文档。

更新

根据海报的 request,我扩展了代码(以上)以处理 test 中的多个名称列。因此,像

这样的初始test数据集
test <- tibble::tribble(
  ~Name1,~Name2,# ...  ~Name_n
  "Peter","Gary",# ...     .
  "Susan","Mary",# ...     .
  "Nuernberg","Heisenberg",# ...     .
  "Test","And",# ...     .
  "Heiko","So",# ...     .
  "He","Forth"       # ...     .
)

将给出 genderpred 喜欢的结果

   name       proportion_male proportion_female gender year_min year_max
   <chr>                <dbl>             <dbl> <chr>     <dbl>    <dbl>
 1 Gary                0.996             0.0035 male       1932     2012
 2 Mary                0.0038            0.996  female     1932     2012
 3 Peter               0.997             0.0032 male       1932     2012
 4 Susan               0.0023            0.998  female     1932     2012
 5 Nuernberg          NA                NA      NA           NA       NA
 6 Test               NA                NA      NA           NA       NA
 7 Heiko              NA                NA      NA           NA       NA
 8 He                 NA                NA      NA           NA       NA
 9 Heisenberg         NA                NA      NA           NA       NA
10 And                NA                NA      NA           NA       NA
11 So                 NA                NA      NA           NA       NA
12 Forth              NA                NA      NA           NA       NA

然后可以根据需要对其进行过滤 (dplyr::filter()) 和排序 (dplyr::arrange())。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。