如何重塑数据集(从长到宽),每个类别有两个测量列,而无需在 R 中进行额外计算

2024-02-02

我有长格式的数据集(请参阅下面的代码来生成此数据集):

region   week   average   percent
    A      20         5        30
    A      21         7        40
    A      22        15        50
    B      20         4        15
    B      21         8        27
    B      22         3        11
    ...

我想准备它进行演示(带有 RMarkdown 的 HTML),所以我需要将其转换为宽的average and percent对于每个week像这样:

                 20                 21                  22
region    average  percent   average  percent    average  percent
     A          5       30        7        40         15       50
     B          4       15        8        27          3       11

我探索过dcast, dyplr, tidyr, htmlTable,还有许多其他人没有成功。我不需要执行任何计算,只需以不同的格式组织数据集即可。

我过去曾这样做过,但我必须编写大量代码。我想知道在 R 中是否有一种简单的方法可以做到这一点。

您可以使用此代码来创建测试数据集:

region = c( "A", "A", "A", "B", "B", "B" )
week = c( "20", "21", "22", "20", "21", "22" )
average = c( 5, 7, 15, 4, 8, 3 )
percent = c( 30, 40, 50, 15, 27, 11 )

test = data.frame(
  region,
  week,
  average,
  percent
)

任何帮助表示赞赏。

谢谢。


@akrun 和 @Matt L. 的两个答案都很好地解决了问题。 @Matt L. 绝对是最简单的一个。谢谢。我在这里发布我根据 @akrun 的答案提出的解决方案。我肯定会在我的最终代码中使用 tidyr 。

library(htmlTable)
library(data.table)
library(Hmisc)

# Create input (initial) dataset (long)
region = c( "A", "A", "A", "B", "B", "B" )
week = c( "20", "21", "22", "20", "21", "22" )
average = c( 5, 7, 15, 4, 8, 3 )
percent = c( 30, 40, 50, 15, 27, 11 )

input_ds = data.frame(
  region,
  week,
  average,
  percent
)

# Reshape the dataset into wide, using columns average and percent
# for each week
reshaped_ds = dcast(
  setDT( input_ds ),
  region ~ week,
  value.var = c("average", "percent")
)

# Extract the week number from each column and get a list of indices 
# sorted by week number
col_order <- order(
  as.numeric(
    sub( ".*_", "", names( reshaped_ds )[-1] )
  )
)

# Re-order columns according to col_order
setcolorder(
  reshaped_ds, names(reshaped_ds)[c(1, col_order + 1)]
)

# Prepare the names for group columns
col_group_names = unique(
  paste(
    "Week",
    sub( ".*_", "", names(reshaped_ds)[-1] )
  )
)

# Create another dataset so we don't mess up the reshaped_ds
final_table_ds = reshaped_ds

# Remove '_##' from column names
names( final_table_ds ) = sub(
  "_.*", "", names( final_table_ds )
)

# Capitalize the first letter of each column name
names( final_table_ds ) = capitalize( names( final_table_ds ) )

# Generate the final table in HTML
htmlTable(
  final_table_ds,
  rnames = FALSE,
  cgroup = c( "", col_group_names ),
  n.cgroup = c( 1, rep( 2, length(col_group_names) ) ),
  col.rgroup = c( "none", "#EDEDED" )
)

最终输出:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重塑数据集(从长到宽),每个类别有两个测量列,而无需在 R 中进行额外计算 的相关文章

  • 绘图不适合 R 窗口

    我正在使用metaR 中的包对比例进行荟萃分析 我的分析中有大约一百项研究 当我打字时forest result 创建我的森林图 它可以工作 但图形在顶部和底部被切掉 无论我做什么 它都不适合绘图窗口 我对如何解决这个问题感到困惑 有任何想
  • 零膨胀泊松分布的经验和理论分布图

    以下是我正在研究的一种数据集 data lt c 0 1 0 11 2 0 3 0 0 2 1 3 1 0 1 0 0 0 2 3 0 0 0 8 1 1 1 0 1 1 2 7 0 0 0 5 2 3 6 1 1 5 2 9 0 0 1
  • 如何在不指定数据集的情况下调整函数

    我有一个函数 基本上可以过滤SPV行 如下所示 请注意 我这样做return coef lt function df1 idd dmda CategoryChosse 然而 我不希望df1作为函数的参数 而是函数的属性df1数据集 在本例中
  • 在闪亮仪表板中显示/隐藏菜单项

    当进入应用程序时 我需要隐藏一个菜单项 当用户选择某个值时 菜单项必须出现 我努力了shinyjs功能hidden 并且它隐藏了一个 menuItem 但是当使用show or toggle 菜单项不会出现 我发现了Rshinydashbo
  • R 中具有 NA 值的聚合栅格

    我在 R 中有一个分辨率为 1 公里的栅格 其 NA 值分布广泛 但位置不规则 即 包含数据的单元格不连续 并且 NA 值分散 我正在尝试使用用户定义的平均圆角函数 包括在下面 以 5 公里分辨率 因子 5 聚合此栅格 使用 raster
  • 什么是 data.frame 可以做而 data.table 不能做的事情?

    我刚刚开始使用 R 并遇到了 data table 我发现它很棒 一个非常天真的问题 我可以忽略 data frame 来使用 data table 以避免两个包之间的语法混淆吗 来自数据表常见问题解答 http datatable r f
  • 匹配向量内的向量

    I have vec1 lt c 0 0 0 1 1 0 1 1 1 0 0 1 vec2 lt c 1 1 我预计 magicFUN x vec1 y vec2 1 4 7 8 这意味着我想要一个完整向量在另一个向量内的位置 match
  • 抑制 r markdown 中的控制台输出,但保留绘图

    嗨 我有以下降价块 r echo FALSE warning FALSE message FALSE error FALSE lapply obj function x plot x main some plot box axis 1 at
  • 不同的分位数:箱线图与小提琴图

    require ggplot2 require cowplot d iris ggplot2 ggplot d aes factor 0 Sepal Length geom violin fill black alpha 0 2 draw
  • 如何编写一个也接受字符输入的 NES 函数?

    我正在开发一个将字符串作为函数参数的 R 包 现在我想使用非标准评估来允许非字符串输入 另外 为了保持向后兼容性 我想保留函数接受字符串的可能性 哈德利给出了example https cran r project org web pack
  • 根据绘图单击事件对数据框进行子集化

    我有下面的数据框 Name lt c John Bob Jack Number lt c 3 3 5 NN lt data frame Name Number 还有一个简单闪亮的应用程序 可以从中创建一个绘图直方图 我的目标是单击直方图的一
  • 两个闪亮的操作按钮

    我正在编写一个闪亮的函数 其中包含两个操作按钮 这两个按钮是左右按钮 单击时可以帮助绘图移动 第一次单击时 这两个按钮都工作正常 当我重新单击它们时 就会出现问题 无论我单击哪个按钮 它都会在两个范围之间来回弹跳 我猜可能是 右 和 左 按
  • R Plotly 禁用图例单击和图例双击

    我想使用 R Plotly 从服务器端禁用绘图图例选择 我们看here https community plot ly t disable legend click functionality hiding traces 1345 2可以使
  • 将 R 传单地图保存为 html:不包括图块

    我正在尝试使用 saveWidget 或将 rmd 文件输出到 html 来保存 R 传单地图 如下所述 将传单输出保存为 html https stackoverflow com questions 30110377 saving lea
  • 为什么 quosures 在 group_by() 中起作用,但在 filter() 中不起作用?

    我正在构建一个函数 我将根据字符串操作数据框 在该函数中 我将根据字符串构建一个列名称 并使用它来操作数据框 如下所示 library dplyr orig df lt data frame id 1 3 amt c 100 200 300
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • ggplot2:图例中的斜体

    我正在尝试编辑图例中的标签 以便第一个标签 WT 为纯文本 而后续 7 个标签为斜体 我一直在使用element text face c plain rep italic 7 但这导致没有任何标签被转换为斜体 我有点困惑为什么它不起作用 因
  • 如何将变量传递给 ddply 中的自定义函数?

    考虑以下数据 d data frame experiment as factor c foo foo foo bar bar si runif 5 ti runif 5 我想进行相关性测试si and ti 对于每个experiment因素
  • 在ggplot2中添加水平线到绘图和图例

    这段代码创建了一个漂亮的图 但我想在 y 50 处添加一条水平黑线 并让图例显示一条黑线 并在图例中显示文本 cutoff 但在图例中保留源点 我可以使用 geom line 添加该行 但无法在图例中获取该行 library ggplot2
  • R 中的微秒时间戳

    在 CSV 文件中 我有几列 其中一列有时间戳 其中每个时间戳是今天午夜经过的微秒 每个 csv 文件仅包含一天内的数据 因此这并不含糊 我的问题是 如何将这些微秒时间戳解析为 R 多谢 我的 CSV 文件的一部分 34201881666

随机推荐

  • 如何生成字母表数组?

    在 Ruby 中我可以做 a z to a to get a b c d z JavaScript 是否提供类似的构造 我个人认为最好的是 alphabet abcdefghijklmnopqrstuvwxyz split 简洁 有效 易读
  • 在 Java 中转换字符

    我正在学习Java 我发现表达式通常必须转换为某种类型才能正确执行 例如 在算术计算期间 字节被提升为整数 因此以下表达式将引发错误 byte b 10 int i i b b ok assigning an integer evaluat
  • 核心文本 - 从 NSRange 获取像素坐标

    我怎样才能得到一个CGRect从一个NSRange对于使用 Core Text 渲染的文本 我正在使用核心文本NSAttributedString 这是绝对的痛苦 但可以做到 您需要使用以下命令获取框架中的所有线条CTFrameGetLin
  • 我正在使用 Redux。我应该管理 Redux 存储中的受控输入状态还是在组件级别使用 setState?

    我一直在试图找出管理我的反应表单的最佳方法 我尝试使用 onChange 来触发操作并使用表单数据更新我的 redux 存储 我还尝试创建本地状态 当提交表单时 我触发并执行操作并更新 redux 存储 我应该如何管理我的受控输入状态 我喜
  • NodeJS 套接字有时可以工作

    因此 我有一个节点服务器 运行expressjs io 使用socket io 并且我正在构建一个跟踪数据库中坐标的网格地图 只是 我遇到了一个特殊的问题 因为我的套接字只监听有时 起初没有错误消息 只是偶然我让页面运行并收到此错误 Unc
  • 内核和用户模式之间共享内存。如何共享句柄?

    我正在尝试在用户进程和内核之间使用共享内存 选项一 让内核创建部分并让用户模式应用程序通过名称 Global my mem 打开内存 它仅在只读模式下工作 当我尝试使用 FILE MAP WRITE 打开部分时 它会拒绝访问 5 不确定如何
  • EF 向后兼容数据库迁移

    我试图弄清楚如何使用 EF 代码优先和迁移来实现以下部署场景 我的想法是 我想通过向后兼容的架构更改来升级数据库 例如 添加一列 并测试一切是否仍然有效 它受到绿色 蓝色部署的启发 但并不完全遵循该模式 这背后的原因是遵循这个过程 升级数据
  • 为什么 Chrome 中的页面上没有加载所有视频?

    http graysonearle com bluemen http graysonearle com bluemen 使用 webkit 浏览器单击它 加载时应该会出现 4x4 的视频网格 但 Chrome 上往往只会加载 1 3 个视频
  • 如何查询android设备硬件信息

    我如何获取 Android 设备硬件信息 如 CPU 架构 速度 霓虹灯 GPU 名称 制造商 RAM 大小 我希望有一种方法可以使用 ndk 本地执行此操作 但如果只能通过 java 代码实现 那么如何执行此操作 您需要使用Build h
  • 尝试使用嵌套属性制作表单

    我是 Rails 的初学者 所以我对嵌套属性很困惑 以下是我正在寻找的内容的概述 租车可以创造汽车 完成 客户可以预订汽车 租赁汽车在预订的同时创建客户 我正在尝试制作一份预订表格 其中包含客户和预订信息 因为租赁汽车将填写所有信息 这就是
  • 如何知道 nuget 包是否可以在 .NET Core 上运行?

    我希望网站或控制台中存在某种过滤器 不幸的是 现在这并不容易 有一个NuGet Github 上开放的问题 https github com NuGet NuGetGallery issues 3098关于向网站添加过滤器 目前 判断包是否
  • RichTextBox 和 Tab 键

    我创建了一个 richTextBox 我注意到当我按 Tab 键时它没有执行任何操作 它应该做一些空间 但它没有 我怎样才能访问它 默认情况下 按 Tab 键会将焦点移至下一个控件 将 RichTextBox 的 AcceptsTab 属性
  • MarkLogic 9 cts.parse 无法正确解析查询

    我正在使用 MarkLogic 9 开发基于 Web 的搜索应用程序 我有一个查询构建界面 允许用户将字符串输入到与数据库中文档的特定 JSON 属性相对应的文本框中 这个想法是 用户可以完全按照 cts parse 我使用服务器端 jav
  • 最外面的 CascadingValue 在页面刷新或直接链接时丢失

    我想在我的 Blazor 应用程序中共享几个组件 这些恰好是 SyncFusion 组件 一个是 SfToast 一个是 SfDialog 我认为一个简单的方法是将组件放在 MainLayout razor 上 然后使用
  • 如何“检查”函数是否确实给出随机结果?

    如何确定一个函数确实是随机的或者尽可能接近这个概念 另外 随机和伪随机之间有什么区别 最后 可以使用哪些算法 来源来生成随机数 P S 也问这个是因为 MySQL 语句使用ORDER BY RAND LIMIT 1没有给出令人信服的结果 随
  • 抽象类的可访问性不一致

    我有一个内部抽象类InternalClassBase和两个 也是内部 类InternalClass1 and InternalClass2 继承自InternalClassBase 我还有一个公共抽象类PublicClassBase和两个
  • 使用 Java 解析包含转义字符的字符串

    我想知道是否有人可以帮助我弄清楚如何解析具有以下格式的字符串 field1 field2 fieldN field1 field2 fieldN 每条记录均以 分隔记录中的每个字段均以 分隔 复杂的是各个字段可能包含转义分隔符 例如 或者
  • D3.js 如何旋转路径上的文本

    这是我的第一个 D3 项目 我不是程序员 所以一次性学习所有内容 我正在尝试制作一个圆形日历 我已经手绘了好几年了 这是一个巨大的痛苦 大多数位现在都可以工作 但我不知道如何将文本旋转 90 度在这条弧线上 一旦我转动了文本 我就需要弄清楚
  • 创建算法=未定义的定义器

    我从远程服务器备份了一些数据库 当我尝试导入该备份时 我的本地服务器遇到了问题 我在这一行收到错误 CREATE ALGORITHM UNDEFINED DEFINER root SQL SECURITY DEFINER VIEW tema
  • 如何重塑数据集(从长到宽),每个类别有两个测量列,而无需在 R 中进行额外计算

    我有长格式的数据集 请参阅下面的代码来生成此数据集 region week average percent A 20 5 30 A 21 7 40 A 22 15 50 B 20 4 15 B 21 8 27 B 22 3 11 我想准备它