Pivot_Longer 创建多个组合列

2023-12-06

我在其他地方看到了对我的问题的一些可能的讨论,但它要么没有解决,要么我无法完全理解答案是否适用,所以我正在创建一个新问题。

以下问题特别涉及这个主题,但尚未解决。使用pivot_longer将宽列收集成多个长列

获取以下示例数据。正如您所看到的,有一个唯一标识符变量,然后是其他 8 个变量。对于其他 8 个,您可以将它们分为两组:gpa 和percent_a。每个集合都有一个班级、小组、课程和部门值。

在我的实际数据中,我有大约 20 个不同的集合,它们都具有相同的结构,每个集合中有相同的四个描述符。

我想做的是执行类似于pivot_longer 的功能。除了将多个列组合成一组键和值列之外,我的数据中的每个唯一集(班级、组、课程、部门)将被分组到自己的键/值列中。

set.seed(101)
df <- data.frame(
  id = 1:10,
  class_gpa = rnorm(10, 0, 1),
  course_gpa = rnorm(10, 0, 1),
  group_gpa = rnorm(10, 0, 1),
  dept_gpa = rnorm(10, 0, 1),
  class_percent_a = rnorm(10, 0, 1),
  course_percent_a = rnorm(10, 0, 1),
  group_percent_a = rnorm(10, 0, 1),
  dept_percent_a = rnorm(10, 0, 1)
)

因此,在这个示例中,假设我将所有 gpa 值分为两列(gpa_type 和 gpa_value),将 percent_a 值分为两列(percent_a_type、percent_a_value),那么最终我将只有 5 列:

id, gpa_type, gpa_value, percent_a_type, percent_a_value

有没有办法做到这一点?使用pivot_longer或其他方法。谢谢。


老实说,我宁愿简单地这样做:

df %>% pivot_longer(-id, names_to = c("type", ".value"), names_pattern = "([^_]+)_(.*)")

并将数据保留为更实用的格式:

# A tibble: 40 x 4
      id type      gpa percent_a
   <int> <chr>   <dbl>     <dbl>
 1     1 class  -0.326     0.482
 2     1 course  0.526    -1.15 
 3     1 group  -0.164    -0.260
 4     1 dept    0.895     1.51 
 5     2 class   0.552     0.758
 6     2 course -0.795    -0.274
 7     2 group   0.709    -1.41 
 8     2 dept    0.279     1.62 
 9     3 class  -0.675    -2.32 
10     3 course  1.43      0.578
# … with 30 more rows

为什么要为每个“集合”重复“类型”属性?

对于您想要的输出:

# A tibble: 40 x 5
      id gpa_type gpa_value percent_a_type percent_a_value
   <int> <chr>        <dbl> <chr>                    <dbl>
 1     1 class       -0.326 class                    0.482
 2     1 course       0.526 course                  -1.15 
 3     1 group       -0.164 group                   -0.260
 4     1 dept         0.895 dept                     1.51 
 5     2 class        0.552 class                    0.758
 6     2 course      -0.795 course                  -0.274
 7     2 group        0.709 group                   -1.41 
 8     2 dept         0.279 dept                     1.62 
 9     3 class       -0.675 class                   -2.32 
10     3 course       1.43  course                   0.578
# … with 30 more rows

你可以尝试:

lst_df <- df %>%
  gather(key, value, -id) %>%
  extract(key, into = c("var", "type"), "([^_]+)_(.*)") %>%
  split(.$type) 

names(lst_df) %>% 
  map_dfc(~ setNames( 
    lst_df[[.x]] %>% 
      select(-type), 
    c("id", paste0(.x, c("_type", "_value"))))) %>%
  select(-matches("id\\d+"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pivot_Longer 创建多个组合列 的相关文章

  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • Shiny:动态数据框构建; renderUI、观察、reactiveValues

    我认为如何使用 Shiny 的 renderUI 功能动态子集数据的问题经常出现 但我很难理解何时使用 renderUI 带有 uiOutput 而不是其他功能 包括观察 反应 反应值甚至条件面板 我想构建一个完全交互式的数据框架 其中每个
  • 显示特定颜色

    我正在研究颜色分类 我正在用特定颜色初始化一个矩阵 以便可以获得红色 蓝色或绿色的 16x16 矩阵 代码如下 library rgl color1 lt function n lt 3 m lt 16 a lt list numeric
  • 删除字符串中的转义符,或者“我怎样才能让 \ 不碍事?”

    转义字符在 R 中会带来很多麻烦 前面的问题证明了这一点 更改列中的值 https stackoverflow com questions 10046357 change the values in a column 10046412 10
  • 在 R 中打印具有长字符串的数据帧

    让我们有一列包含长字符串的数据框 df lt data frame short rnorm 10 0 1 long replicate 10 paste rep sample letters runif 1 5 8 collapse 如何打
  • 使用 geom_tile() 的 R ggplot 热图:如何按年份排序并在 y 轴上显示所有年份?

    在研究了哈德利的书并在这里搜索后 我创建了一个由年和月矩阵组成的热图 颜色根据时间序列变量的百分比变化而变化 热图和我用来获取它的代码如下所示 我还有一些我自己无法解决的问题 1 如何对矩阵进行排序 排序 以便 y 轴中的年份从最早到最晚
  • 将数字提高到非整数幂时出现奇怪的 NaN [重复]

    这个问题在这里已经有答案了 我执行了以下代码 tau lt 0 25 h lt 0 6 n 1 5 4 5 dnorm qnorm tau 4 qnorm tau 2 qnorm tau 2 1 2 1 5 R 继续生产NaN 然而 R 实
  • 什么时候在“strsplit”中设置“perl=TRUE”不起作用(按预期或根本不起作用)?

    我只是在尝试优化一些代码时做了一些基准测试并观察到strsplit with perl TRUE is faster比跑步strsplit with perl FALSE 例如 set seed 1 ff lt function paste
  • cspade() R 错误

    我正在尝试从电缆调制解调器的事件中挖掘规则 链接的是数千个文件 当我尝试在所有设备的合并文件 1200 万行 上运行 cspade 算法时 它会花费数小时来消耗 RAM 直到它用完我可用的所有 64 GB 因此 我尝试仅在一台设备的链接文件
  • dplyr / left_join 中的嵌套管链

    在尝试获取分组滞后变量的过程中 仅使用这是不可能的 lag 建议的解决方案是将数据拉出 滞后不同的行 然后重新加入它 我更喜欢在不创建中间对象的情况下执行此操作 并且希望在链中间执行此操作 然而 它似乎没有像我预期的那样工作 问题似乎是使用
  • 如何在R中得到一个大的稀疏矩阵? (> 2^31-1)

    我使用一些 C 代码从数据库中获取文本文件 并从该文件创建 dgcMatrix 类型稀疏矩阵Matrix包裹 我第一次尝试构建一个具有超过 2 31 1 个非稀疏成员的矩阵 这意味着稀疏矩阵对象中的索引向量也必须比该限制长 不幸的是 向量似
  • grep() 搜索数据框的列名

    有没有更清晰 更简单 更直接 更短的方法来做到这一点 其中 df1 是数据框 names df1 grep Yield names df1 我想返回任何包含单词 yield 的列名称 Thanks grep has a value应该适用于
  • 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 read_excel:libxls 错误:无法解析文件

    我试图使用 readxl read excel 将 xls 文件读入 R 但它给出了以下错误 Error filepath data xls libxls error Unable to parse file 还尝试了 readxl exc
  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R

随机推荐

  • 在 PHP 中分割文本文件

    如何使用 PHP 按字符数将大型文本文件拆分为单独的文件 因此 一个 10 000 个字符的文件每 1000 个字符就会被拆分为 10 个文件 此外 只有在找到句号后才可以拆分吗 Thanks 更新 1 我喜欢 zombats 代码 我删除
  • 单元测试适配器抛出异常:不支持 URI 格式

    在 Visual Studio 2010 中 当我使用以下基本代码创建默认测试项目时
  • 让 PowerShell 等待 Excel 完成刷新数据透视表

    所以我开发了一个Powershell脚本来刷新大约40个大的excel文件并保存它们 在这个脚本中我运行一个excel宏来传递excel ODBC 连接参数 然后在刷新完成后从excel文件中删除它们 我唯一的问题是 对于这 40 个文件中
  • qmake 和多个 MSVS 版本

    From Visual Studio 2008 Command Prompt我运行这个命令来生成 vcproj file gt qmake spec win32 msvc2008 并收到警告消息 WARNING Generator MSVC
  • LINQ连接多表

    我有4张桌子 table1 id1 fk tbl2 this is the foreign key to the id in table2 table2 id2 fk tbl3 this is the foreign key to the
  • 如何让gganimate中的点出现而不是过渡

    我正在使用 gganimate 假设我有这个 MWE library ggplot2 library gganimate ggplot airquality aes Day Temp geom point color red size 1
  • 有没有办法以编程方式检测用户何时在浏览器中按下 F5 按钮?

    我有一个缓存 每当用户在浏览器中发出 F5 请求时 我都希望该缓存失效 我正在运行 JSF 2 0 应用程序 有没有办法做到这一点 Use the FacesContext getCurrentInstance isPostBack 检查页
  • 解析 YAML 文件

    这是我第一次使用 YAML 文件 所以我首先想到的是找到任何可以帮助我解析文件的库 我找到了两个库 YamlBean 和 SnakeYAML 我不确定我要使用哪一个 这是我尝试解析的文件的示例 users user1 groups Prem
  • AppEngine Memcache 过期策略

    我期待以下 AppEngine 代码 MemcacheService memcache MemcacheServiceFactory getMemcacheService memcache put Foo Bar Expiration on
  • PHP中删除一行记录

    我试图删除数据库中的一条记录 所以基本上我创建了一个包含我所有记录的表 现在我需要做的是 当我单击 删除 链接时 它将删除记录选定的行 它看起来是这样的 所以基本上我这里有 3 页 1 页面 php2 添加 php3 删除 php 这是我的
  • Waitpid 相当于超时吗?

    想象一下我有一个启动多个子进程的进程 父母需要知道孩子何时退出 我可以用waitpid 但是如果 当父级需要退出时 我无法告诉被阻塞的线程waitpid优雅地退出并加入它 让事情自行清理固然很好 但这可能没什么大不了的 我可以用waitpi
  • Visual Studio Code 无法从 Powershell 打开

    我正在尝试使用 Powershell 打开 Visual Studio Codecode在文件夹内时执行命令 当我尝试这样做时 我总是收到此错误 块引用代码 术语 代码 不被识别为 cmdlet 函数 脚本文件或可操作程序的名称 检查名称的
  • ASP.net MVC - 模型绑定排除类字段?

    在最近的一个项目中 我遇到了意想不到的障碍 具有简单公共字段 注意不是属性 的类似乎不想与 ASP net MVC 3 0 模型绑定器 这是设计使然吗 除了将字段更改为属性之外 这里还有其他选项吗 update 使用简单字段 而不是属性 的
  • JavaScript - SetInterval 无法正常工作

    我得到了这段脚本 在本地运行 但似乎 setInterval 不起作用 发送表单功能不起作用 任何帮助将不胜感激 Thanks 你需要打电话setInterval 函数中不带括号 如下所示 setI
  • 如何禁用音频播放器 HTML5 中的特定控件

    我只想显示音频控件 但禁止用户拖动按钮 因为我不希望用户跳过歌曲 如何使这项工作有效 你不能 您要么显示浏览器的内置控件 要么不显示 所以你应该隐藏它们并制作你自己的 如果你不想要搜索功能 这应该很容易 或者看看像 jPlayer http
  • 如何检查来自 json 的值是否为 null?

    我想检查 json 的结果是否为空 我使用了这段代码 NSString likesCount if facebook valueForKey likes NSNull null return else return facebook val
  • 为什么我的网站不显示我的网站图标?

    我有一个刚刚上传到互联网的网站 当我在 Ubuntu 上使用 Firefox 3 0 1 浏览该网站时 我看不到图标 WinXP 上的 Firefox 3 0 1 确实会显示它 WhyUbuntu下不显示favicon吗 它是根目录中的 f
  • iOS 13:使用新的 NEHotspotConfiguration.init(ssidPrefix: String) 似乎不起作用

    我目前正在运行 Xcode 11 0 和 iOS 13 1 测试版 我正在尝试 iOS 13 中新添加的功能 能够连接到仅已知前缀的 Wifi 热点 苹果文档 这非常适合无头配件的 Wifi 设置 因为您无需要求用户切换到操作系统设置即可连
  • Pandas:通过时间间隔的另一个数据帧过滤数据帧

    如果我有一个数据框 df data 例如 ID Time X Y Z H 05 2020 06 26 14 13 16 0 055 0 047 0 039 0 062 05 2020 06 26 14 13 21 0 063 0 063 0
  • Pivot_Longer 创建多个组合列

    我在其他地方看到了对我的问题的一些可能的讨论 但它要么没有解决 要么我无法完全理解答案是否适用 所以我正在创建一个新问题 以下问题特别涉及这个主题 但尚未解决 使用pivot longer将宽列收集成多个长列 获取以下示例数据 正如您所看到