R语言嵌套列表提取性别统计值拆分至male/female独立列及报错处理
问题修复方案
报错原因
dplyr::if_else()对返回值类型要求严格,真假分支返回值必须为同一类型。你代码中用于填充缺失的0默认是双精度浮点型,而table()输出的计数值为整数型,类型不匹配触发报错。
修复代码
将填充值0改为整数型0L即可解决问题,修改后的完整代码如下:
library(purrr) library(dplyr) male_values <- map(male_female_row, "male") %>% map(~ if_else(is.null(.x), 0L, .x)) %>% unlist() female_values <- map(male_female_row, "female") %>% map(~ if_else(is.null(.x), 0L, .x)) %>% unlist() result <- tibble(male = male_values, female = female_values)
运行后result中会按行存储对应的男女性别计数,无对应性别时自动填充0,符合需求。
优化实现(可选)
可以通过长表转换的方式替代原有循环逻辑,代码更简洁鲁棒性更高:
library(tidyr) library(dplyr) result <- test1 %>% mutate(row_id = row_number()) %>% pivot_longer(-row_id, values_to = "name", values_drop_na = TRUE) %>% mutate(gender = gender::gender(name)$gender) %>% count(row_id, gender) %>% pivot_wider(names_from = gender, values_from = n, values_fill = 0L) %>% select(-row_id)
内容的提问来源于stack exchange,提问作者Max H.
相关产品推荐
相关产品推荐

