我有一个带有列表列的小标题。其中之一(我们称之为info
列)包含命名列表。对于 tibble 的每一行,我想改变一个新的列表列,它将包含一个向量(嵌套)。该向量的元素将对应于相邻“ ”列表列中的命名列表的名称。info
例子
my_tibble <-
structure(
list(
var_name = c("artworks", "sports","independence", "gender"),
info = list(
list(
`Vincent van Gogh` = "The Starry Night",
`Leonardo da Vinci` = "Mona Lisa",
`Johannes Vermeer` = "Girl with a Pearl Earring",
`Sandro Botticelli` = "The Birth of Venus",
`Grant Wood` = "American Gothic"
),
NULL,
list(
`1776` = "USA",
`1818` = "Argentina",
`1956` = "Morocco"
),
list(male = "XY chromosomes",
female = "XX chromosomes")
)
),
row.names = c(NA, -4L),
class = c("tbl_df", "tbl", "data.frame")
)
> my_tibble
## # A tibble: 4 x 2
## var_name info
## <chr> <list>
## 1 artworks <named list [5]>
## 2 sports <NULL>
## 3 independence <named list [3]>
## 4 gender <named list [2]>
期望的输出
var_name info names_of
<chr> <list> <list>
1 artworks <named list [5]> <chr [5]> # c("Vincent van Gogh", "Leonardo da Vinci", "Johannes Vermeer", "Sandro Botticelli", "Grant Wood")
2 sports <NULL> <chr [1]> # c("seems_null")
3 independence <named list [3]> <dbl [3]> # c(1776, 1818, 1956)
4 gender <named list [2]> <chr [2]> # c("male", "female")
我的尝试
我想改变一个新的列表列,它检查info
列。如果info
不是NULL
,则新的列表列将包含一个向量,其中列表的名称嵌套在info
; "seems_null"
否则,在变异列表列中放置一个字符串。
library(dplyr)
library(purrr)
my_tibble %>%
mutate(names_of = map_chr(info, ~ ifelse(is.null(.x), "seems_null", names(.x))))
## # A tibble: 4 x 3
## var_name info names_of
## <chr> <list> <chr>
## 1 artworks <named list [5]> Vincent van Gogh
## 2 sports <NULL> seems_null
## 3 independence <named list [3]> 1776
## 4 gender <named list [2]> male
不幸的是,这仅返回列表中的第一个名称info
。
我也尝试过使用pmap()
,如this answer所示,但没有奏效:
my_list %>%
mutate(names_of = map_chr(info, ~ ifelse(is.null(.x), list("seems_null"), pmap(.x, names(.x)[c(...)]) ) ))
错误:
mutate()
输入有问题names_of
。
x 无效下标类型 'list'
i 输入names_of
为map_chr(...)
。
我将不胜感激任何帮助!