R 从独立列中的嵌套列表中获取值

R 从独立列中的嵌套列表中获取值,r,R,我希望你能帮我做点什么。 假设您有以下代码: library(gender) test1 = tibble::tribble( ~name1, ~name2, ~name3, ~name4, ~name5, "PETER", "KLAUS", NA, NA, NA, "HEIKE", "ANTONIA", NA, NA, NA,

我希望你能帮我做点什么。 假设您有以下代码:

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
}
创建一个数据帧

请参见第1行,模型2显示了2,2,但我只有2个男性和0个女性(查看列表中的男性和女性行)。如何将列表(值)中的两个整数拆分为两个单独的列,如$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)


作为一般提示,您可以使用
map
轻松访问嵌套列表中的值。如果列表元素中缺少女性值或男性值,则以下方法在返回计数0时使用此方法。如果
male\u female\u行
中的一个或多个值被格式化为字符而不是数字,则此操作也有效:

# 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)
#生成一些数据
男\女\行%
未列出()
女性价值%
映射(~if_else(is.null(.x),0.x))%>%
未列出()
TIBLE(男性值、女性值)
输出:

# 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
#一个tible:5 x 2
男性价值观女性价值观
1           1             0
2           2             4
3           3             0
4           5             1
5           0             7

谢谢您的回答。这几乎就是我想要的,我只想保持公向量和母向量的大小相同,所以当没有母向量时,我希望元素为0,以便比较每行的公向量和母向量。希望我能解释。谢谢你的澄清。我已经更新了我的答案来实现这一点-希望这就是你的想法。@Max H。它解决了你的问题吗?如果是,请随时接受,如果不是,请告诉我,我可以编辑它。再次感谢您的快速回答。现在我得到了失败:
false
必须是双向量,而不是字符向量。但当我得到摘要(男/女排)时,一切都结束了numeric@MaxH. 这可能是因为嵌套列表中的一个(或多个)值是字符,而不是整数,所以
map\u dbl
会抛出错误。我已经编辑了我的答案来解决这个问题。如果这仍然不完全正确,那么编辑您的问题以包含完整的起始数据将有助于找到解决方案。
# 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