【问题标题】:multiple variables tidyr pivoting多变量 tidyr 旋转
【发布时间】:2020-11-26 23:32:55
【问题描述】:

我有一个名为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_idvalue.xvalue.y 变成valuedate 列基本上仍然存在不变(但实际上可以用来进行分组,因为每个日期现在都有两个与之关联的系列,即seriesvalue

我已阅读 google 上的 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")

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

【问题讨论】:

  • @akrun 我对您的解决方案进行了微调,它确实有效,我们只需要在names_to 内的series_id 前面添加一个点。即names_to=c('.value', '.series_id');我们甚至可以将.series_id 更改为我们喜欢的任何内容,但我们不能更改.value。我想我需要进一步阅读这个点的含义以及如何使用它。如果你回来我会接受你的回答,再次感谢!
  • 你是对的。我之前没有测试过。对不起。原因可能是value 列名
  • 一点问题都没有!只要您有时间,您可以添加答案,我会接受的,毕竟这是您的工作:) @akrun

标签: r dplyr pivot tidyr


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多