r - 从单独列中的嵌套列表中获取值
问题描述
我希望你能帮助我一些事情。假设您有以下代码:
library(gender)
test1 = tibble::tribble(
~name1, ~name2, ~name3, ~name4, ~name5,
"PETER", "KLAUS", NA, NA, NA,
"HEIKE", "ANTONIA", NA, NA, NA,
"SANDRA", "HEIKO", "HEIKO", "HEIKE", "HEIKE"
)
male_female_row <- list()
for (row in 1:nrow(test1)) {
x1=gender(as.character(test1[row,]))
y = table(x1$gender)
male_female_row[[row]] = y
}
比
model2 = do.call(rbind.data.frame, male_female_row) ### List to dataframe
创建一个数据框。
请参阅第 1 行,model2 显示 2,2 但我只有 2 名男性和 0 名女性(查看列表 male_female_row)。如何将列表(值)中的两个整数分成两个单独的列,如 $male $female?
当我从@Rory 编写答案时:
male_values <- map(male_female_row, "male") %>%
map(~ if_else(is.null(.x), 0, .x)) %>%
unlist()
female_values <- map(male_female_row, "female") %>%
map(~ if_else(is.null(.x), 0, .x)) %>%
unlist()
tibble(male_values, female_values)
我得到了失败:
`false` must be a double vector, not an integer vector.
解决方案
作为一般提示,您可以使用map
轻松访问嵌套列表中的值。如果列表元素中不存在女性或男性值,则以下使用此方法返回计数 0。如果其中的一个或多个值male_female_row
被格式化为字符而不是数字,这也有效:
# Generate some data
male_female_row <- list(
list(male = "1"),
list(male = 2, female = "4"),
list(male = 3),
list(male = 5, female = 1),
list(female = 7)
)
male_values <- map(male_female_row, "male") %>%
map(~ if_else(is.null(.x), 0, .x)) %>%
unlist()
female_values <- map(male_female_row, "female") %>%
map(~ if_else(is.null(.x), 0, .x)) %>%
unlist()
tibble(male_values, female_values)
输出:
# A tibble: 5 x 2
male_values female_values
<dbl> <dbl>
1 1 0
2 2 4
3 3 0
4 5 1
5 0 7
推荐阅读
- couchbase - 用于检索计数的子查询
- c# - ThrowingException 导致单元测试中断?
- python - 包含特殊字符的字符串在解析它们时在新列中被分隔
- r - D3tree,按组更改颜色
- javascript - Firefox:keydown 事件对象中没有名为 inputType 的字段
- c# - ASP.NET 核心中的自定义路由
- python - 根据用户输入,获取另一列的排名值
- php - 如何在下拉更改中将 id 名称传递给 jquery?
- ios - iPhone XS 最大 | 斯威夫特 4.2 | 应用程序崩溃 libsystem_kernel.dylib abort_with_payload_wrapper_internal + 104
- javascript - 单击保存按钮后重定向用户