r - 多变量 tidyr 旋转

标签 r dplyr pivot tidyr

我有一个名为 testtibble 看起来像这样:

   date       series_id.x  value.x series_id.y value.y
   <date>     <chr>        <dbl>   <chr>       <dbl>
 1 2020-08-03 ABC           0.1      ^FHJ          0.078
 2 2020-07-27 ABC           0.105    ^FHJ          0.093
 3 2020-07-20 ABC           0.12     ^FHJ          0.105
 4 2020-07-13 ABC           0.145    ^FHJ          0.125
 5 2020-07-06 ABC           0.15     ^FHJ          0.128
 6 2020-06-29 ABC           0.15     ^FHJ          0.125
 7 2020-06-22 ABC           0.155    ^FHJ          0.14 
 8 2020-06-15 ABC           0.175    ^FHJ          0.155
 9 2020-06-08 ABC           0.17     ^FHJ          0.153
10 2020-06-01 ABC           0.15     ^FHJ          0.128

我试图将此 tibble 转换为更长的数据系列,其中 series_id.xseries_id.y 成为 series_id ,而value.xvalue.y变为valuedate列基本保持不变(但实际上可以用来进行分组,因为每个日期现在都有两个与之关联的系列,即 seriesvalue)

我已经阅读了谷歌上的 tidyr 旋转指南并尝试了一些排列,但没有一个有效。

通常我得到:

test %>% tidyr::pivot_longer(cols=contains(c("x","y")), names_to="series_id", values_to="value")

test %>% tidyr::pivot_longer(-date, names_to="series_id", values_to="value")

test %>% tidyr::pivot_longer(-date, names_to=c("series_id", "value"), names_pattern="(.)(.)")

test %>% tidyr::pivot_longer(cols = starts_with("series_id"), names="series_id", values="value")

以上都是失败的尝试。我知道我错过了一些东西,但指南中并不清楚我的用例是否可行。

最佳答案

这里,我们可能需要指定分隔符,即.。默认情况下,它处于正则表达式模式,即 . 可以匹配任何字符,因此我们转义 (\\)。此外,由于有多组列,请将 names_to 指定为 .value 和列名称的向量

library(dplyr)
library(tidyr)
test %>%
    pivot_longer(cols = matches('\\.[xy]'),
      names_to = c('.value', '.series_id'), values_to = 'value', names_sep="\\.")

关于r - 多变量 tidyr 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63288072/

相关文章:

r - 用整数矩阵子集data.frame

r - 生存剧情传说

r - dplyr 变异返回 NA 而 sapply 不带有 strsplit

r - 如何对字符串变量使用 cut 函数?

使用 dplyr (R) 根据查找表重新编码值

sql-server - 为什么我的数据透视查询无法正确分组?

MySQL 将行转为动态数量的列

r - dplyr 使用动态变量名称进行变异,同时尊重 group_by

r - 展平列作为参数

c# - 合并 gridview 行并消除重复项