首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多变量tidyr枢轴

多变量tidyr枢轴
EN

Stack Overflow用户
提问于 2020-08-07 00:35:03
回答 1查看 36关注 0票数 2

我有一个名为testtibble,如下所示:

代码语言:javascript
复制
   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)

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

通常我会得到:

代码语言:javascript
复制
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")

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 00:39:57

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

代码语言:javascript
复制
library(dplyr)
library(tidyr)
test %>%
    pivot_longer(cols = matches('\\.[xy]'),
      names_to = c('.value', '.series_id'), values_to = 'value', names_sep="\\.")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63288072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档