【发布时间】:2020-11-26 23:32:55
【问题描述】:
我有一个名为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)
我已阅读 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