问题描述
我想知道如何获取无法使用性别包处理的所有值。请看下面的代码:
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 中找到 dplyr
的 join
文档。
更新
根据海报的 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()
)。