如何在tibble中显示列表的元素?
问题描述:
我有以下tibble:如何在tibble中显示列表的元素?
data_frame(type = list(c('1','2', 'text'), c(1L ,2L), c(1.5, 2.1), c(TRUE, FALSE))) %>%
mutate(typeof=unlist(map(type, typeof)),
mode= unlist(map(type, mode)),
class= unlist(map(type, class)))
# A tibble: 4 x 4
type typeof mode class
<list> <chr> <chr> <chr>
1 <chr [3]> character character character
2 <int [2]> integer numeric integer
3 <dbl [2]> double numeric numeric
4 <lgl [2]> logical logical logical
,我想用列类型的内容添加一列,如:
# A tibble: 4 x 4
type typeof mode class vector
<list> <chr> <chr> <chr> <chr>
1 <chr [3]> character character character c('1','2', 'text')
2 <int [2]> integer numeric integer c(1L ,2L)
3 <dbl [2]> double numeric numeric c(1.5, 2.1)
4 <lgl [2]> logical logical logical c(TRUE, FALSE)
我试图unlist(map(type, quote))
但它给:
# A tibble: 4 x 5
type typeof mode class vector
<list> <chr> <chr> <chr> <list>
1 <chr [3]> character character character <symbol>
2 <int [2]> integer numeric integer <symbol>
3 <dbl [2]> double numeric numeric <symbol>
4 <lgl [2]> logical logical logical <symbol>
甚至不知道<symbol>
是什么...
答
首先,如果您使用的是purrr
包,则在创建示例数据框时可能不需要unlist
。我们可以使用map_chr
来获得相同的输出。
library(tidyverse)
dt <- data_frame(type = list(c('1','2', 'text'), c(1L ,2L), c(1.5, 2.1), c(TRUE, FALSE))) %>%
mutate(typeof = map_chr(type, typeof),
mode = map_chr(type, mode),
class = map_chr(type, class))
至于你想要的输出,我想我们可以用map_chr
与toString
创建一个字符串与列表中的所有内容。虽然它与你想要的输出有点不同,但我认为它可以用于演示目的。
dt2 <- dt %>% mutate(vector = map_chr(type, toString))
dt2
# A tibble: 4 x 5
type typeof mode class vector
<list> <chr> <chr> <chr> <chr>
1 <chr [3]> character character character 1, 2, text
2 <int [2]> integer numeric integer 1, 2
3 <dbl [2]> double numeric numeric 1.5, 2.1
4 <lgl [2]> logical logical logical TRUE, FALSE
没有比'type'更好的存储方式了。将它作为代码的字符向量存储是一个坏主意。要查看它,只需提取它,例如'df $ type',或者使用'tidyr :: unnest'来扩展它(在这种情况下是个坏主意,因为类型不一致)。 – alistaire
@alistaire我只是试图打印一张表来学习这三种功能的区别 – Dambo