r - 在由嵌套列表组成的 tibble 中取消嵌套变量
问题描述
使用一些 JSON 数据,我有一个结构奇怪的小标题:
suppressMessages(library(tidyverse))
df <- data_frame(y = c("D", "E"), z = list(list(a = 1, b = 2, c = 3), list(a = 4, c = 5)))
我想取消z。这几乎有效:
> unnest(df, z, .id = "name")
# A tibble: 5 x 3
y z name
<chr> <list> <int>
1 D <dbl [1]> 1
2 D <dbl [1]> 1
3 D <dbl [1]> 1
4 E <dbl [1]> 2
5 E <dbl [1]> 2
但我想要的是这样的:
# A tibble: 5 x 3
y z name
<chr> <dbl> <chr>
1 D 1 a
2 D 2 b
3 D 3 c
4 E 4 a
5 E 5 c
如何避免丢失名称信息并弹出 z 的值?
感谢@AntoniosK 解决了我的问题。这是他的(稍微编辑过的)解决方案:
df %>%
mutate(d = map(z, ~data.frame(.x) %>% gather(name, z))) %>%
unnest(d)
# # A tibble: 5 x 3
# y name z
# <chr> <chr> <dbl>
# 1 D a 1
# 2 D b 2
# 3 D c 3
# 4 E a 4
# 5 E c 5
解决方案
suppressMessages(library(tidyverse))
df <- data_frame(y = c("D", "E"), x = list(list(a = 1, b = 2, c = 3), list(a = 4, c = 5)))
df %>%
mutate(d = map(x, ~data.frame(.x) %>% gather(name, x))) %>%
unnest(d)
# # A tibble: 5 x 3
# y name x
# <chr> <chr> <dbl>
# 1 D a 1
# 2 D b 2
# 3 D c 3
# 4 E a 4
# 5 E c 5
推荐阅读
- reactjs - 可以将 React Router 基本名称配置为尊重 CSS 中的资产 URL 吗?
- shell - sc:电子表格计算器,使用脚本执行
- javascript - Shopify 是否有其 CDN 的基本 URL?
- c# - 如何从按钮的 Clicked 事件导航到另一个页面并将列表视图的 ItemSelected 作为参数传递?
- javascript - 如何使用 javascript/jquery 获得这种时间戳格式?
- python-3.x - 我的不和谐机器人如何通过 message.id 找到消息?(之前由机器人发布)
- node.js - 尝试更改此模块以使用 return 语句
- web-scraping - Scrapy spider 不会遍历 start-urls 列表
- python - 熊猫,堆叠一些列,取消堆叠一些其他的
- leaflet - Zeppelin 笔记本不支持传单多边形方法