使用pivot_wider()“传播”多个变量

2023-12-14

使用“传播”多个变量的最佳方法是什么pivot_wider()在开发版本中tidyr?

# https://tidyr.tidyverse.org/dev/reference/pivot_wider.html
# devtools::install_github("tidyverse/tidyr")
library(tidyr)
library(tidyverse)
have <- tibble::tribble(
  ~user_id, ~question, ~answer, ~timestamp,
  1, "q1", "a1", "2019-07-22 16:54:43",
  1, "q2", "a2", "2019-07-22 16:55:43",
  2, "q1", "a1", "2019-07-22 16:56:43",
  2, "q2", "a2", "2019-07-22 16:57:43",
  3, "q1", "a1", "2019-07-22 16:58:43",
  3, "q2", "a2", "2019-07-22 16:59:43"
) %>%
  mutate(timestamp = as_datetime(timestamp))

have
# # A tibble: 6 x 4
# user_id question answer timestamp          
# <dbl> <chr>    <chr>  <dttm>             
#   1       1 q1       a1     2019-07-22 16:54:43
#   2       1 q2       a2     2019-07-22 16:55:43
#   3       2 q1       a1     2019-07-22 16:56:43
#   4       2 q2       a2     2019-07-22 16:57:43
#   5       3 q1       a1     2019-07-22 16:58:43
#   6       3 q2       a2     2019-07-22 16:59:43

want <- tibble::tribble(
    ~user_id, ~q1, ~q2, ~timestamp_q1, ~timestamp_q2,
    1, "a1", "a2", "2019-07-22 16:54:43", "2019-07-22 16:55:43",
    2, "a1", "a2", "2019-07-22 16:56:43", "2019-07-22 16:57:43",
    3, "a1", "a2", "2019-07-22 16:58:43", "2019-07-22 16:59:43"
  ) %>%
  mutate(timestamp_q1 = as_datetime(timestamp_q1)) %>%
  mutate(timestamp_q2 = as_datetime(timestamp_q2))

want
# A tibble: 3 x 5
#  user_id q1    q2    timestamp_q1        timestamp_q2       
#    <dbl> <chr> <chr> <dttm>              <dttm>             
#1       1 a1    a2    2019-07-22 16:54:43 2019-07-22 16:55:43
#2       2 a1    a2    2019-07-22 16:56:43 2019-07-22 16:57:43
#3       3 a1    a2    2019-07-22 16:58:43 2019-07-22 16:59:43

如果您想分散一对变量,则此方法有效,但会失败,因为只有user_id应该是识别变量。

have %>%
  pivot_wider(names_from = question, values_from = answer)

# # A tibble: 6 x 4
# user_id timestamp           q1    q2   
# <dbl> <dttm>              <chr> <chr>
#   1       1 2019-07-22 16:54:43 a1    NA   
#   2       1 2019-07-22 16:55:43 NA    a2   
#   3       2 2019-07-22 16:56:43 a1    NA   
#   4       2 2019-07-22 16:57:43 NA    a2   
#   5       3 2019-07-22 16:58:43 a1    NA   
#   6       3 2019-07-22 16:59:43 NA    a2   

您可以在其中包含多列values_from一次性展开多列的参数:

have %>%
    pivot_wider(
        id_cols = user_id,
        names_from = question,
        values_from = c(answer, timestamp)
    ) %>%
    # remove the 'answer_' prefix from those cols
    rename_all(~ str_remove(., "answer_"))

Output:

# A tibble: 3 x 5
  user_id q1    q2    timestamp_q1        timestamp_q2       
    <dbl> <chr> <chr> <dttm>              <dttm>             
1       1 a1    a2    2019-07-22 16:54:43 2019-07-22 16:55:43
2       2 a1    a2    2019-07-22 16:56:43 2019-07-22 16:57:43
3       3 a1    a2    2019-07-22 16:58:43 2019-07-22 16:59:43
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用pivot_wider()“传播”多个变量 的相关文章

随机推荐

  • 如何通过Selenium和Webdriver提高执行速度

    测试脚本执行过程中速度非常慢 不知道原因 这是我的脚本 driver Navigate GoToUrl url driver Manage Timeouts ImplicitWait TimeSpan FromSeconds 20 driv
  • QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka 转换器

    我需要处理YUVAndroid 上 H W 解码输出的数据 实际上 我使用的是Nexus4 解码输出格式是QOMX COLOR FormatYUV420PackedSemiPlanar64x32Tile2m8ka type 但是我需要YUV
  • 防止 MS-SQL 表中的循环引用

    我有一个包含 ID 和 ParentAccountID 的帐户表 以下是重现这些步骤的脚本 如果 ParentAccountID 为 NULL 则该帐户被视为顶级帐户 每个帐户最终应以顶级帐户结束 即 ParentAccountID 为 N
  • Google Apps脚本中的持久变量[重复]

    这个问题在这里已经有答案了 以下始终显示 0 var gNumber 0 function myTest Browser msgBox gNumber gNumber 当然 我可以使用 ScriptProperties 或 UserProp
  • 《小阴谋家》中的 Y 组合器讨论

    所以 我花了很多时间阅读并重新阅读第9章的结尾小阴谋家 其中应用 Y 组合器是为length功能 我认为我的困惑可以归结为一个对比两个版本长度的语句 在组合器被分解之前 A lambda mk length mk length mk len
  • 反序列化具有多种数据类型的 JSON 文件作为一个键

    我想分析 Telegram Chats 因此我以 JSON 格式导出了一个聊天记录 并希望将其反序列化到我的分析软件中 id 397910 type message date 2018 02 21T10 27 59 edited 1970
  • Google Maps API v3 多个标记信息窗口

    我使用下面的代码来显示带有多个标记和信息窗口的地图 现在我遇到了所有标记上显示最后一个信息窗口的非常常见的问题 我尝试过各种解决方案 包括 http you arenot me 2010 06 29 google maps api v3 0
  • 在 Eclipse 中运行时加载资源时出现问题

    我正在开发一个 swing 项目 使用 maven2 从命令行 和 eclipse 没有 Maven 集成 所以 我通过生成 eclipse 项目Maven Eclipse 插件 mvn eclipse eclipse 将其导入到 ecli
  • 如何使用 HMAccessoryPayLoad 添加 HomeKit 配件?

    您好 目前我正在研究 HomeKit 我想使用 HomeKit 实现一项功能 我的要求是不使用二维码我想添加配件 因为每个配件都有自己的 URL 例如X HM XXXXXXXXX与 QR 码相关联 即HMAccessoryPayLoad 我
  • 调整 hexbin 图例中断

    在这个六边形图的示例中 右侧的图例有 10 个级别 类 中断 有谁知道如何更改级别数 假设我想将其更改为 5 或其他值 library hexbin x rnorm 1000 mean 50 sd 1 y rnorm 1000 mean 3
  • django 1.8 的多个数据库(mongodb[mongoengine] 和 sql )

    我正在将 mongoengine 与 Django 结合使用 我的项目需要连接到一个 MongoDB 实例 而另一个则使用 sql setting py 的数据库部分应该是什么样子 DATABASES default ENGINE djan
  • 在 Python 中将一部分 geojson 对象合并到另一个对象中

    EDIT 我正在尝试在 Python 中操作 JSON 文件 在我的数据中 一些多边形有多个相关信息 坐标 LineString and 面积百分比 and area Text and Area in Point 我想将它们组合成一个 JS
  • 带有 NavigationController 和 TabController 的故事板

    看起来这个应该很容易弄清楚 但是今天下午我没有任何运气 我将我的问题的快速 简化的故事板模型拼凑在一起 基本上 我希望下面的表视图控制器也位于选项卡栏控制器中 除了已经存在的导航控制器之外 选项卡将在两个表视图控制器之间切换 现在 带有按钮
  • 如何实现没有操作栏的导航抽屉,但通过主屏幕上的按钮打开导航屏幕?

    导航抽屉应用程序的 left drawer 片段上有登录屏幕 请参阅链接 如何在android导航抽屉下显示活动 登录屏幕 我想使用按钮从主屏幕打开此登录屏幕 并且也不希望导航抽屉上有操作栏 有人可以帮我解决这个问题吗 提前致谢 其实很简单
  • 关于创建自己的维基的建议?

    我和我的朋友正在考虑创建我们自己的维基 鉴于它们最近变得如此普遍 我们听说这并不难 我们希望使网站尽可能简单 我们在网页设计方面有一些经验 但在系统管理方面却没有很多经验 未来我们应该牢记哪些事情 例如 哪些维基农场可能有用 或者我们应该牢
  • 当我尝试从 java 运行批处理文件时,我收到“dig 未被识别为内部或外部命令”

    import java io public class Main public static void main String args throws IOException StringIndexOutOfBoundsException
  • 提交任务到Spark

    我按照本教程在 ubuntu 14 04 上安装了 Sparkhttp blog prabeeshk com blog 2014 10 31 install apache spark on ubuntu 14 dot 04 我能够运行 Sp
  • 在 webview 开始加载之前操作它获取的 url

    我想将当前位置作为请求变量添加到 web 视图中加载的 URL 这样我就可以在页面上使用此信息 而无需重新加载或额外请求 我有一个带有 shouldOverrideUrlLoading 的 WebviewClient 但是当使用 loadU
  • 自动调用作为子程序引用的哈希值

    我有一个哈希值 其中一些值不是标量数据 而是返回标量数据的匿名子例程 我想让这对在哈希中查找值的代码部分完全透明 这样它就不必知道某些哈希值可能是返回标量数据的匿名子例程 而不仅仅是普通的旧值标量数据 为此 有没有办法让匿名子例程在访问其键
  • 使用pivot_wider()“传播”多个变量

    使用 传播 多个变量的最佳方法是什么pivot wider 在开发版本中tidyr https tidyr tidyverse org dev reference pivot wider html devtools install gith