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个时间段变量的长格式[重复] 的相关文章

  • 如何让 print() 将参数传递给 R 中用户定义的打印方法?

    我在 R 中定义了一个 S3 类 它需要自己的打印方法 当我创建这些对象的列表并打印它时 R 按其应有的方式对列表中的每个元素使用我的打印方法 我想对打印方法实际显示的数量进行一些控制 因此 我的类的 print 方法需要一些额外的参数 但
  • R中添加水印

    我在用magickR中的库 我想在一些图片上添加水印 I used image annotate功能如下 img lt image read C Users Maydin Desktop manzara png image annotate
  • 如何提取与 R 中主题 ID 列表匹配的行?

    我有一个包含许多主题 ID 的数据框 每个主题都有重复观察 我还有一个单独的数据框 其中只有一个主题 ID 列表 我想从更大的数据框中匹配和提取 如何以允许我引用不同数据帧中的SubjectID列表的方式编写代码 不确定我是否完全理解这个问
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 返回数据帧 R 中的下一行

    我有一个看起来像这样的数据框 kind datetime book 2016 04 23 04 23 00 pen 2016 04 23 04 30 00 toy 2016 04 23 06 45 00 我想为数据集中的每一行返回下一行的日
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • 是否可以通过扫描从控制台读取而不回显字符?

    这是一个示例函数 passwordEntry lt function cat Enter your password pwd lt scan n 1 what character quiet TRUE invisible pwd 并测试该功
  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 在 r 中的 group_by 之后建模后取消列表列的嵌套

    我想对所有组进行线性回归group by 将模型系数保存在列表列中 然后使用 unnest 扩展列表列 这里我用的是mtcars以数据集为例 注 我想用do here becausebroom tidy 不适用于所有型号 mtcars gt

随机推荐

  • 使用 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 函数将宽格式转换为长格式时遇到问题 我正在使用的数据集包含