我有一个名为test的tibble,如下所示:
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.x和series_id.y变为series_id,value.x和value.y变为value,date列基本上保持不变(但实际上可以用来进行分组,因为现在每个日期都有两个与之关联的序列,即series和value)
我已经阅读了谷歌上的tidyr pivoting指南,并尝试了一些排列,但都没有奏效。
通常我会得到:
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")以上都是失败的尝试。我知道我遗漏了一些东西,但指南中并不清楚我的用例是否可能。
发布于 2020-08-07 00:39:57
在这里,我们可能需要指定分隔符.。默认情况下,它处于正则表达式模式,即.可以匹配任何字符,因此我们转义(\\)。此外,由于有多组列,因此应将names_to指定为.value的向量和列名
library(dplyr)
library(tidyr)
test %>%
pivot_longer(cols = matches('\\.[xy]'),
names_to = c('.value', '.series_id'), values_to = 'value', names_sep="\\.")https://stackoverflow.com/questions/63288072
复制相似问题