R 我使用的函数返回空结果

R 我使用的函数返回空结果,r,dplyr,R,Dplyr,我试着用一个人的名字来“猜测”性别。我知道有一个性别数据包,但我想利用我自己的数据 作为一名初学者,我试图复制gender包的代码,但它返回了空结果 这是我的名为namestat的数据库 dput(head(namestat,10)) structure(list(name = c("AABIA", "AABIDA", "AABISH", "AADARSH", "AADIA", "AAEISHA", "AAESHA", "AAFAF", "AAFIA", "AAFIRA"), female =

我试着用一个人的名字来“猜测”性别。我知道有一个性别数据包,但我想利用我自己的数据

作为一名初学者,我试图复制gender包的代码,但它返回了空结果

这是我的名为namestat的数据库

dput(head(namestat,10))
structure(list(name = c("AABIA", "AABIDA", "AABISH", "AADARSH", 
"AADIA", "AAEISHA", "AAESHA", "AAFAF", "AAFIA", "AAFIRA"), female = c(1, 
2, 1, 2, 1, 1, 1, 1, 19, 1), male = c(0, 0, 0, 0, 0, 0, 0, 0, 
0, 0)), row.names = c(NA, 10L), class = "data.frame")
代码如下:

function(names) {

    namestat %>%
        filter(name %in% tolower(names)) %>%
        group_by(name) %>%
        summarise(female = sum(female),
                  male = sum(male)) %>%
        mutate(proportion_male = round((male / (male + female)),
                                       digits = 4),
               proportion_female = round((female / (male + female)),
                                         digits = 4)) %>%
        mutate(gender = ifelse(proportion_female == 0.5, "either",
                               ifelse(proportion_female > 0.5, "female",
                                      "male"))) %>%
        select(name, proportion_male, proportion_female, gender)

}
我希望输出带有genderfunc(“AABIA”)

姓名比例\男性比例\女性性别
1 AABIA 0 1女性

但目前我收到一个空结果。

太长,无法添加为注释。使用此选项对我很有用:

select_me<-function(nam){
  df %>%
  group_by(name) %>%
  summarise(female = sum(female),
            male = sum(male)) %>%
  mutate(proportion_male = round((male / (male + female)),
                                 digits = 4),
         proportion_female = round((female / (male + female)),
                                   digits = 4)) %>%
  mutate(gender = ifelse(proportion_female == 0.5, "either",
                         ifelse(proportion_female > 0.5, "female",
                                "male"))) %>% 
 dplyr::select(name, proportion_male, proportion_female, gender) %>% 
    filter(name%in%nam)
}
select_me("AABIA")


# A tibble: 1 x 4
  name  proportion_male proportion_female gender
  <chr>           <dbl>             <dbl> <chr> 
1 AABIA               0                 1 female
选择\u me%
分组单位(名称)%>%
总结(女性=总和(女性),
男性=总和(男性))%>%
突变(比例男性=圆形((男性/(男性+女性)),
数字=4),
女性比例=圆形((女性/(男性+女性)),
位数=4))%>%
突变(性别=ifelse(女性比例=0.5,“要么”,
ifelse(女性比例>0.5,“女性”,
“男性”))%%>%
dplyr::选择(姓名、男女比例、性别)%>%
筛选器(名称%n在%n中)
}
选择我(“AABIA”)
#一个tibble:1 x 4
姓名比例\男性比例\女性性别
1 AABIA 0 1女性

提供一个带有
dput的namestat示例
将dput用于数据而不是驱动链接。请阅读。谢谢,我已经完成了你提到的那些更改。对不起,驱动器链接。namestat中是否存在
Nick
!%tolower(names)中的
name%将失败,因为名称将使用大写字母,
tolower(names)
将产生
aabia
即小写字母。因此,您有两个选项,一个是
namestat%>%filter(tolower(name)%in%tolower(names))%%>%…
或者
namestat%>%filter(name%in%names)%%>%…
select_me<-function(nam){
  df %>%
  group_by(name) %>%
  summarise(female = sum(female),
            male = sum(male)) %>%
  mutate(proportion_male = round((male / (male + female)),
                                 digits = 4),
         proportion_female = round((female / (male + female)),
                                   digits = 4)) %>%
  mutate(gender = ifelse(proportion_female == 0.5, "either",
                         ifelse(proportion_female > 0.5, "female",
                                "male"))) %>% 
 dplyr::select(name, proportion_male, proportion_female, gender) %>% 
    filter(name%in%nam)
}
select_me("AABIA")


# A tibble: 1 x 4
  name  proportion_male proportion_female gender
  <chr>           <dbl>             <dbl> <chr> 
1 AABIA               0                 1 female