取消嵌套包含列表的数据框

2023-11-30

我有一个包含列表的数据框,如下所示:

# Load packages
library(dplyr)

# Create data frame
df <- structure(list(ID = 1:3, 
                     A = structure(list(c(9, 8), c(7,6), c(6, 9)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr")), 
                     B = structure(list(c(3, 5), c(2, 6), c(1, 5)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr")), 
                     C = structure(list(c(6, 5), c(7, 6), c(8, 7)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr")), 
                     D = structure(list(c(5, 3), c(4, 1), c(6,  5)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr"))), 
                row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))

# Peek at data 
df
#> # A tibble: 3 x 5
#>      ID A         B         C         D        
#>   <int> <list>    <list>    <list>    <list>   
#> 1     1 <dbl [2]> <dbl [2]> <dbl [2]> <dbl [2]>
#> 2     2 <dbl [2]> <dbl [2]> <dbl [2]> <dbl [2]>
#> 3     3 <dbl [2]> <dbl [2]> <dbl [2]> <dbl [2]>

我想解除列表的嵌套,可以使用pmap_dfr.

# Expand rows
df %>% purrr::pmap_dfr(function(...)data.frame(...))
#>   ID A B C D
#> 1  1 9 3 6 5
#> 2  1 8 5 5 3
#> 3  2 7 2 7 4
#> 4  2 6 6 6 1
#> 5  3 6 1 8 6
#> 6  3 9 5 7 5

Created on 2019-06-28 by the reprex package (v0.3.0)

这是期望的结果,但似乎是在重新发明轮子,因为tidyr::unnest旨在将列表列展平回常规列。使用tidyr::unnest但是会产生以下错误:

df %>% unnest(cols = c(A, B, C, D))
#Error: No common type for `x` <tbl_df<A:double>> and `y` <double>.
#Call `rlang::last_error()` to see a backtrace

我该如何申请unnest在这种情况下,用列表列展平我的数据框?


版本信息

> packageVersion("tidyr")
[1] ‘0.8.3.9000’

Note:Hadley Wickham 已在 github 上将此问题标记为 tidyr 版本 0.8.3.9000 中的错误(请参阅here)。在问题得到解决之前,我将保留以下答案作为潜在的解决方法。

看起来像nest更具体地用于在 0.8.3.9000 中创建数据帧的列表列。来自文档:嵌套创建一个列表列数据帧数;取消嵌套将其展平回常规列。。例如,尝试:

df <- tibble(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1) %>% 
    nest(data = c(y, z))

返回:

# A tibble: 3 x 2
      x           data
  <dbl> <list<df[,2]>>
1     1            [2]
2     2            [2]
3     3            [2]

然后看看df$data:

<list_of<
  tbl_df<
    y: integer
    z: integer
  >
>[3]>
[[1]]
# A tibble: 3 x 2
      y     z
  <int> <int>
1     1     6
2     2     5
3     3     4

[[2]]
# A tibble: 2 x 2
      y     z
  <int> <int>
1     4     3
2     5     2

[[3]]
# A tibble: 1 x 2
      y     z
  <int> <int>
1     6     1

您的数据框的列是向量的列表列,它们似乎属于chop,它会缩短数据帧,同时保留其宽度。例如,尝试:

df <- tibble(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1) %>% 
    chop(c(y, z))

返回:

# A tibble: 3 x 3
      x y         z        
  <dbl> <list>    <list>   
1     1 <int [3]> <int [3]>
2     2 <int [2]> <int [2]>
3     3 <int [1]> <int [1]>

看看df$y:

[[1]]
[1] 1 2 3

[[2]]
[1] 4 5

[[3]]
[1] 6

知道这一点,适合您的数据的方法将是chop的对应者unchop,所以给定你的数据框:

# A tibble: 3 x 5
     ID           A           B           C           D
  <int> <list<dbl>> <list<dbl>> <list<dbl>> <list<dbl>>
1     1         [2]         [2]         [2]         [2]
2     2         [2]         [2]         [2]         [2]
3     3         [2]         [2]         [2]         [2]

Try unchop(df, c(A, B, C, D)) or unchop(df, A:D),应该返回:

# A tibble: 6 x 5
     ID     A     B     C     D
  <int> <dbl> <dbl> <dbl> <dbl>
1     1     9     3     6     5
2     1     8     5     5     3
3     2     7     2     7     4
4     2     6     6     6     1
5     3     6     1     8     6
6     3     9     5     7     5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

取消嵌套包含列表的数据框 的相关文章

  • 带有用户输入的knitr

    我正在使用 R markdown 并使用 Rstudio 来 Knit 我有以下 R markdown 文件 title Untitled author date output html document r setup include F
  • 在 Shiny 中设置一个绘图缩放以匹配另一个绘图缩放

    我正在尝试使用情节重排获取一个图的 x 轴缩放限制 并将它们应用到 Shiny 中的另一个图 到目前为止 我可以从 plot1 x轴限制 获取相关的plotly relayout数据 将其转换 从数字到日期 并在绘制 plot2 之前将其提
  • R - 正则表达式错误(PCRE 版本)

    我正在尝试使用koRpus在 R 中在运行 RHEL6 的 Linux 服务器上进行词形还原 上周 当我安装了 MRO Microsoft R Open 3 2 3 时 下面的代码效果很好 library koRpus lw c danci
  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • 如果“testthat”测试在“R”中失败,则打印自定义诊断信息

    I use a testthat单元测试来检查是否data frame函数返回的结果与我期望它返回的结果相同 如果测试失败 testthat打印一些诊断信息 例如 MyFunction df orig is not identical to
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 如何在R中同时对三个字段进行网络分析

    如何在 R 中同时对三个字段进行网络分析 下面是示例数据以及desired output在最后一栏中 df lt data frame stringsAsFactors FALSE id 1 c ABC ABC BCD CDE DEF EF
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY

随机推荐

  • C++ 中的网络适配器信息

    在 Windows 8 上 我可以在 C 中使用任何标准函数来获取系统中处理以太网的每个网络接口卡的 IP 地址和网络掩码列表吗 我能想到的获取此类信息的唯一其他方法是解析ipconfig 但我真的不想在 C 中走这条路 微软有一个东西叫I
  • 如何使用 DictationServices.framework

    Mac 10 8 包含私有 DictationServices framework 它永远不会在 App Store 中获得批准 而只是出于兴趣 如何利用它的私有类 方法和消息 root DictationServices framewor
  • iTextSharp - 在合并 PDF 中使用 PDFAction.GotoLocalPage

    我编写了一些代码 将多个 PDF 合并为一个 PDF 然后从 MemoryStream 中显示该 PDF 这很好用 我需要做的是将目录添加到文件末尾 并提供指向每个 PDF 开头的链接 我计划使用 GotoLocalPage 操作来执行此操
  • 自定义 Woocommerce 购物车页面中 2 列的结账字段

    新的 WooCommerce 更新结帐字段后 列的行为很奇怪 这是我的结帐字段自定义 add filter woocommerce checkout fields custom override checkout fields functi
  • powershell中的哈希表

    我正在 PowerShell 中开发一个应用程序 我将变量存储在哈希表中 如何保持哈希表中的顺序 我希望顺序与我填充哈希表时的顺序相同 哈希表本质上不维护值的顺序 网上已经有一些解决方法 检查这些 http www tellingmachi
  • 在同一页面上显示 PHP 表单验证结果

    我确信第一反应会是这样的 这家伙没有谷歌吗 是的 我承认这确实看起来是一个非常基本的概念 我已经尝试过并试图理解它 查找有关该主题的各种帖子和文章等 但一切都无济于事 也许你可以给我指出正确的方向 我有一个基本的联系表单 contact h
  • Unity3D 中的随机数?

    我发现的是如何创建随机数 伟大的 然而 该解决方案在其他功能中不起作用 为了创建一个随机数 我使用了 Random randomDirection new Random int directionChoice randomDirection
  • 从 Excel 单元格捕获时间值

    我正在编写一个 Excel 应用程序 它将从 Excel 文件中读取和写入指定的值 并将它们显示给用户 但是 当我尝试从具有Number Format或键入的函数 hh min Hour Min 我无法准确地获得我想要的值 这是我的代码 w
  • MongoDB 中的反向数组字段

    我有一个集合 其中的位置字段以错误的顺序输入 location 38 7633698 121 2697997 当我尝试使用 在字段上放置二维索引时 db collection ensureIndex location 2d 我收到以下错误
  • 隐藏

    是的 我是一个 CSS 菜鸟 我正在尝试整理隐藏 div 的各种方法 例如 display none visibility hidden 还有更深奥的吗 忘记 JQuery JavaScript 事件 我只是想知道具有大量内容的 div 和
  • 如何将源文件夹添加到 Grails 应用程序

    我使用 STS 来开发 Grails 应用程序 并且需要使用 wsimport 实用程序生成的一堆类 为了不将我的源代码与自动生成的源代码混合在一起 我想添加单独的目录并将生成的类放在那里 如下所示 grails project class
  • 从 etree 中删除一个节点但留下子节点

    我正在遍历 XML 树 但从树中提取节点而留下其内部节点时遇到了一些麻烦 例如
  • Localized.strings 的字符编码,由 genstrings 生成

    在我的 ViewController swift 中 我有一个本地化字符串 TheOutLabel text NSLocalizedString hello comment The hello word 在终端中 为了生成 Localize
  • 如何在 AngularJS 应用程序中访问 Shibboleth SP 属性

    我是 SSO 和 Shibboleth 的新手 我已经在 Apache 服务器上成功实现了 Shibboleth SP 每当用户尝试访问受保护的资源时 都会根据 IDP 对用户进行身份验证 基本上 Shibboleth SSO 有以下 6
  • 分析内存转储以查找泄漏

    我们有一个 C NET 应用程序 其中存在内存泄漏 我使用 procdump 从生产机器上运行的应用程序实例获取内存转储 生产计算机运行 32 位 Windows XP 和 NET 4 0 exe配置设置为 net 4 0
  • C++ 测试框架:寻求推荐[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个可以在我的 Windows Visual Studio 机器上使用的 快速而肮脏 的 C 测试框架 这只是我在开发 所以它不一定是企业
  • 在本地使用 Git,然后合并并签入 StarTeam

    我的客户当前要求我们使用 StarTeam 来检查代码更改 我想从 StarTeam 中提取所有代码并设置一个本地 Git 存储库 以便我可以利用分支来对某些 JQuery 模块进行一些升级 有人对使用本地 Git 存储库然后检查 Star
  • Docker 无法启动已存在的服务

    Running docker compose up d我收到以下错误 Starting cr redis Starting cr rabbitmq Starting cr rabbitmq error Starting cr redis e
  • 将 HQL 与 MySQL 结合使用,如何在分组之前对结果集进行排序,以便选择正确的记录?

    有没有办法在单个查询中用 HQL 或可能使用 Hibernate Criteria 编写每组最大 n 查询 我正在努力解决与此类似的问题 Schema 书籍有 Publication date 书有作者 作者有出版商 我手头有一个出版商 以
  • 取消嵌套包含列表的数据框

    我有一个包含列表的数据框 如下所示 Load packages library dplyr Create data frame df lt structure list ID 1 3 A structure list c 9 8 c 7 6