R:将宽格式转换为具有多个3个时间段变量的长格式[重复]

2023-12-14

抱歉,如果这是一个简单的问题,但我在搜索后找不到简单的解决方案。我对 R 相当陌生,并且在使用 Melt (reshape2) 或 Gather(tidyr) 函数将宽格式转换为长格式时遇到问题。我正在使用的数据集包含 22 个不同的时间变量,每个变量都有 3 个时间段。当我尝试一次性将所有这些格式从宽格式转换为长格式时,就会出现问题。我已经成功地单独转换它们,但这是一个非常低效且漫长的过程,所以我想知道是否有人可以提出一个更简单的解决方案。下面是我创建的示例数据集,其格式与我正在使用的数据集类似:

Subject <- c(1, 2, 3)
BlueTime1 <- c(2, 5, 6)
BlueTime2 <- c(4, 6, 7)
BlueTime3 <- c(1, 2, 3)
RedTime1 <- c(2, 5, 6)
RedTime2 <- c(4, 6, 7)
RedTime3 <- c(1, 2, 3)
GreenTime1 <- c(2, 5, 6)
GreenTime2 <- c(4, 6, 7)
GreenTime3 <- c(1, 2, 3)

sample.df <- data.frame(Subject, BlueTime1, BlueTime2, BlueTime3,
                    RedTime1, RedTime2, RedTime3,
                    GreenTime1,GreenTime2, GreenTime3)

对我有用的一个解决方案是使用 tidyr 中的收集功能,按主题排列数据(以便将每个主题的数据分组在一起),然后仅选择主题、时间段和评级。这是针对每个变量(在我的例子中是 22)完成的。

install.packages("dplyr")
install.packages("tidyr")
library(dplyr)
library(tidyr)

BlueGather <- gather(sample.df, Time_Blue, Rating_Blue, c(BlueTime1,
                                                          BlueTime2,
                                                          BlueTime3))
BlueSorted <- arrange(BlueGather, Subject)

BlueSubtracted <- select(BlueSorted, Subject, Time_Blue, Rating_Blue)

在这段代码之后,我将所有内容合并到一个数据框中。这对我来说似乎非常缓慢且低效,希望有人可以帮助我找到一个更简单的解决方案。谢谢你!


这里的想法是gather()所有时间变量(除Subject), use separate() on key将它们分成label and a time进而spread() the label and value以获得您想要的输出。

library(dplyr)
library(tidyr)

sample.df %>%
  gather(key, value, -Subject) %>%
  separate(key, into = c("label", "time"), "(?<=[a-z])(?=[0-9])") %>%
  spread(label, value)

这使:

#  Subject time BlueTime GreenTime RedTime
#1       1    1        2         2       2
#2       1    2        4         4       4
#3       1    3        1         1       1
#4       2    1        5         5       5
#5       2    2        6         6       6
#6       2    3        2         2       2
#7       3    1        6         6       6
#8       3    2        7         7       7
#9       3    3        3         3       3

Note

这里我们使用regex in separate()由此answer由 @RichardScriven 在第一个遇到的数字上拆分列。


Edit

我从您的评论中了解到您的数据集列名称实际上采用以下形式ColorTime_Pre, ColorTime_Post, ColorTime_Final。如果是这种情况,您不必在中指定正则表达式separate()作为默认值sep = "[^[:alnum:]]+"会匹配你的_并将密钥拆分为label and time因此:

sample.df %>%
  gather(key, value, -Subject) %>%
  separate(key, into = c("label", "time")) %>%
  spread(label, value)

会给:

#  Subject  time BlueTime GreenTime RedTime
#1       1 Final        1         1       1
#2       1  Post        4         4       4
#3       1   Pre        2         2       2
#4       2 Final        2         2       2
#5       2  Post        6         6       6
#6       2   Pre        5         5       5
#7       3 Final        3         3       3
#8       3  Post        7         7       7
#9       3   Pre        6         6       6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:将宽格式转换为具有多个3个时间段变量的长格式[重复] 的相关文章

  • 如何使用 R 或 PowerShell 从文本文件中提取数据?

    我有一个包含如下数据的文本文件 This is just text Username SOMETHI C Text Account DFAG Finish time 1 JAN 2011 00 31 58 91 Process ID 202
  • 使用cowplot包的多重图的中心X轴标签

    我有一个多图图形 由 2x2 配置中的 4 个图组成 我使用 cowplot 包和plot grid函数使用下面的代码排列了绘图 plot grid p1 p2 p3 p4 align vh vjust 1 scale 1 其中 p1 p4
  • R 中的聚类分析:确定最佳聚类数

    如何选择最佳的聚类数量来进行 k 均值分析 绘制以下数据的子集后 多少个簇比较合适 如何进行聚类树突分析 n 1000 kk 10 x1 runif kk y1 runif kk z1 runif kk x4 sample x1 lengt
  • 在 R 中索引数据帧

    再会 我不明白这里的主题 就像它有效但我不明白为什么 我有这个数据库 planets df is pre loaded in your workspace Use order to create positions positions lt
  • 如何替换R中的“意外转义字符”

    当我尝试从 Facebook URL 的字符对象解析 JSON 时 我收到 fromJSON data 中的错误 位置 130 处出现意外的转义字符 o 看一下这个 library RCurl library rjson data lt g
  • 如何使用 ggplot2 绘制 NA 间隙

    在 R 的基本绘图中 如果数据系列 ggplot2 中存在 NA 则会绘制间隙 举个例子看看 df data frame x c 1 10 y c 1 10 df 5 7 NA plot df type l 但是 ggplot2 删除了缺失
  • 指定生存图的自定义时间点

    我正在努力使用以下方法创建生存 累积事件图ggsurvplot函数从survminer包裹 我想为我的绘图指定自定义时间点 但我不知道该怎么做 这xlim and break x by参数有点帮助 但它们创建了均匀间隔的时间点和比我想要的更
  • R CMD 检查警告:在文档对象中使用的函数/方法...但不在代码中

    我正在写一个包 但一个持久的R CMD check警告阻止我完成包裹并将其发布到 CRAN 我用roxygen2对于内联文档 尽管这可能不是错误的根本原因 如果您知道如何删除此警告 我很可能可以找到一种方法来使用roxygen2 如何删除警
  • 通过删除连续的重复项来减少字符串长度

    我有一个包含 2 个字段的 R 数据框 ID WORD 1 AAAAABBBBB 2 ABCAAABBBDDD 3 我想通过仅保留字母而不是重复中的重复项来简化具有重复字母的单词 e g AAAAABBBBB应该给我AB and ABCAA
  • 如何在environment.yml中安装CRAN包

    我正在使用 miniconda 来管理数据科学包的安装 这是我现在已经建立的工作流程 所以我希望它也能在这种情况下工作 我也认为它可以工作 因为它应该在这样的情况下有所帮助 比纯 python 需要更多的依赖项 我想安装pythonCDT工
  • 如何在主图区域之外的 ggplot2 中添加多个标题

    我想为页脚添加两个标题 但 ggplot 似乎只需要 1 是否有解决方法可以将注释或 geom text 添加到左下角和右下角 library ggplot2 p lt ggplot mtcars aes x wt y mpg geom p
  • 无法使用 cairo 安装 R

    我正在从源代码安装 R cd R 3 2 2 configure prefix pwd with cairo yes with readline no with libpng yes with x no 我已经从源代码安装了 cairo v
  • 如何在R中绘制仪表图表?

    如何在 R 中绘制以下图 Red 30 Yellow 40 Green 30 Needle at 52 所以这里有一个完整的ggplot解决方案 注意 从原始帖子中编辑 在仪表中断处添加数字指示器和标签 这似乎是OP在评论中所要求的 如果不
  • 为什么 data.table `:=` 的 knit 缓存失败?

    这在精神上与this https stackoverflow com q 15267018 1900520问题 但机制上一定不同 如果您尝试缓存knitr包含一个块data table 分配然后它的行为就好像该块尚未运行 并且后面的块看不到
  • 如何安装和管理多个版本的 R 包

    我正在开发一个使用 R 进行可重现计算的框架 我正在努力解决的一个问题是 某些 R 代码可能在包的 X Y Z 版本中完美运行 但是为什么你在 3 年后尝试重现它 这些包已经更新了 一些功能发生了变化 代码不再运行 此问题还会影响使用包的
  • 自定义 colorRampPalette 中的颜色条

    我定义了一个 colorRampPalette my colors colorRampPalette c light green yellow orange red 如何为其绘制颜色条 图例 项目 最好仅使用基本包 我正在寻找一个充满该颜色
  • 生成因子变量水平的预测值

    我正在使用连续结果变量对多个因子变量进行回归lm 例如 fit lt lm dv factor hour factor weekday factor month factor year count data df 我想生成预测值 yhat
  • 根据另一个向量替换向量中的值

    我想替换向量中的值 x 与另一个向量 y 陷阱 22 方法需要是动态的 以适应向量中不同数量的 级别 x 例如 考虑向量x x lt sample c 1 2 3 4 5 100 replace TRUE gt x 1 2 4 1 1 3
  • Rstudio 命令历史记录

    这些天我经常使用 Rstudio 但最近注意到我的命令不再存储在历史记录中 我不知道这是从什么时候开始的 但可能是在安装最新版本时发生的 关于问题可能是什么的任何想法吗 Thanks 这是我们在 v0 93 73 中引入并在 v0 93 7
  • S4 类 [(子集)带有附加参数的继承

    这是一个扩展在 R 中的访问器函数中使用 callNextMethod https stackoverflow com q 24875284 2752888 2017 03 25 更新 为了说明如何仅在加载方法时失败 但在构建的包中时不会失

随机推荐

  • 使用 api 1.1 的 Twitter POST 问题

    我们刚刚更改为 Twitter api 1 1 现在发推文不起作用并返回错误 远程服务器返回错误 400 错误请求 对此进行的研究表明 这与身份验证有关 但我们正在发送刚刚从登录页面获得的 accessToken 和机密 在 api 1 0
  • Linux内核中使用的三个优先级有什么区别?

    我是 Linux 内核的新手 现在我正在研究 Linux 内核中的进程调度 Linux 中存在三种类型的优先级 静态优先级 动态优先级 实时优先级 现在我明白的是 静态优先级和动态优先级仅针对传统进程定义它们只能取 100 到 139 之间
  • 使用令牌保护 REST Web 服务 (Java)

    这个问题在某种程度上与下面链接的问题相关 但是 我需要更清楚地了解某些方面和一些附加信息 参考 REST Web 服务身份验证令牌实施 背景 我需要使用令牌实现 REST Web 服务的安全性 Web 服务旨在与 Java 客户端一起使用
  • 是否有 JavaFX 方法来测试坐标是否在闭合路径内?

    我试图找到一种 JavaFX 方法来检测坐标是否位于闭合路径内 我创建了以下示例 并研究了各种方法 但是没有任何效果如我所愿 只有在非矩形形状内时才返回 true Node contains 仅适用于形状的边缘 不适用于内部 Node in
  • 如果仅知道密钥和明文,则恢复 AES IV

    如果我以 AES CBC 模式解密密文 并且第一个块的解密明文与原始已知明文不匹配 则很明显用于解密的 IV 与加密期间使用的 IV 不匹配 用于加密或解密的 IV 均未知 如果我知道密文 我可以执行以下操作来查找加密期间使用的 IV 尝试
  • Python 中限制函数执行

    类似的问题和答案还有很多 但我仍然找不到可靠的答案 所以 我有一个函数 可能运行时间太长 函数是私有的 从某种意义上说我无法更改它的代码 我想将其执行时间限制为 60 秒 我尝试了以下方法 Python 信号 不适用于 Windows 和多
  • 在 Eclipse 中获取类中所有方法的概览

    我已经完成了相当多的 xCode 编程 发现类中方法的概述视角非常有用 它看起来像这样 MY GROUP 1 lt defined with pragma mark MY GROUP 1 M method11 M method12 M MY
  • 如何在按键时更改 pygame 中文本的颜色?

    当谈到 pygame 时 我是一个完全的业余爱好者 我需要制作一个程序 当文本沿不同方向传播时 该程序会改变文本的颜色 这意味着每次按键 上 下 左 右 颜色都会不同 到目前为止 我已经能够让文本向各个方向移动 但是我不明白如何改变颜色 任
  • 堆分配一个二维数组(不是指针数组)

    我正在编写 C 代码 我想堆分配 512 256 字节 为了我自己的方便 我希望能够使用语法 array a b 访问元素 没有算术来找到正确的索引 我在网上看到的每个教程都告诉我创建一个指针数组 该数组指向我想要在数组中包含的行的数组 这
  • 两个文本字段的总和 - javascript

    我在网上找到了 this 1 相当困难的 javascript 示例 并且我已经在我的网站上成功实现了它 但是 在本例中 我希望在一个新文本字段中获得两个小计的结果 传统的getElementbyId and total value tot
  • Mongoose:定义未找到文档的 404 状态不起作用

    我正在学习 MongoDB 和 mongoose 现在我在为我的路由处理程序定义 404 状态时遇到问题 这是代码 app get users id async req res gt const id req params id try c
  • Sql 层次结构 ID 按级别排序

    是否可以按层次结构 id 对层次结构中的 sql 数据进行排序 然后对每个级别按字母顺序排序 假设我们有一个员工表 其中根据员工 ID 列出了组织层次结构 鲍勃 5 有菲尔 17 和查理 28 向他汇报 乔西 6 有泰勒 15 和迈克 56
  • VBA 运行时错误中没有调试选项

    我使用的是 excel 2013 当出现运行时错误时 我没有得到任何调试选项 如何在运行时错误期间获得调试选项 编辑 我意识到我只在以下情况下遇到这个问题 通常我会得到调试选项 除了这种情况 特别痛苦的是它甚至不告诉我错误在哪一行 错误的屏
  • Promise : then 与 then + catch [重复]

    这个问题在这里已经有答案了 以下2个代码有什么区别吗 myPromise then function console log success catch function console log error myPromise then f
  • 按返回键“不”关闭软件键盘 - SwiftUI

    我想创建一个 TextField 可以在其中快速输入多个字符串项same字段 输入项目 然后点击return添加它 我已经有了添加功能 但是我不想在每次按回车键将项目添加到列表时关闭键盘 因为这对于用户每次点击文本字段以返回该项目来说很麻烦
  • Pandas - 将前导“0”添加到字符串值中,以便所有值都相等 len

    我有一个专栏 code x 我把它转换为 astype str 一些示例值是45362 0 75345 0 346157 0 572575 0 我希望它们都是 6 位数字 又名 045362 075345 346157 572575 我正在
  • 单击按钮时的 JavaFX 新场景

    标题可能有点模糊 所以请允许我更好地定义它 我有一段工作代码 如下 我正在开发的游戏的简单主菜单 除了 开始 按钮之外 一切都运行良好 我想要做的是单击 开始 按钮 然后在同一舞台 窗口 上出现一个新场景 我不想看到新窗口打开 我与 Jav
  • c 中的 fflush(stdout)

    当我在 fflush stdout 处并且在 GDB 中中断时 我可以在实际打印之前知道 stdout 中有什么吗 我如何才能知道任意时间点标准输出中有什么内容 如果您自己分配一个缓冲区并将其传递给setvbuf 我想你可以在刷新之前访问它
  • Three.js:从平面正交向量到平面旋转矩阵

    我想设置平面的旋转 这需要三个数字来表示 x y 和 z 轴上以弧度为单位的旋转 我没有这些数字 但是 我有一个向量 myVec 一旦旋转 该向量将与平面正交 这个向量让我更近了一步 但还没有完全实现 THREE Vector3 提供了一个
  • R:将宽格式转换为具有多个3个时间段变量的长格式[重复]

    这个问题在这里已经有答案了 抱歉 如果这是一个简单的问题 但我在搜索后找不到简单的解决方案 我对 R 相当陌生 并且在使用 Melt reshape2 或 Gather tidyr 函数将宽格式转换为长格式时遇到问题 我正在使用的数据集包含