不带分隔符的R中的Pivot_longer()?

不带分隔符的R中的Pivot_longer()?,r,dplyr,data-wrangling,R,Dplyr,Data Wrangling,我试图在R中使用pivot_longer()转换一个表。但是分隔不是通过任何常用符号,如“u”或“.”,而是通过列名的结束方式(或“B”或“T”)来实现的。我尝试使用正则表达式,但没有多大成功 下面是原始表的示例,以及我希望最终转换的表是什么样的。非常感谢你的帮助 原始表格: tibble(Datetime = seq(as.Date("2000/1/1"), by = "month", length.out = 10), `ABC

我试图在R中使用pivot_longer()转换一个表。但是分隔不是通过任何常用符号,如“u”或“.”,而是通过列名的结束方式(或“B”或“T”)来实现的。我尝试使用正则表达式,但没有多大成功

下面是原始表的示例,以及我希望最终转换的表是什么样的。非常感谢你的帮助

原始表格:

tibble(Datetime = seq(as.Date("2000/1/1"), by = "month", length.out = 10), 
           `ABC1-P1B` = seq(1,10),
           `ABC1-P1T` = seq(101,110),
           `ABC1-P2B` = seq(11,20),
           `ABC1-P2T` = seq(201,210))
# A tibble: 10 x 5
   Datetime   `ABC1-P1B` `ABC1-P1T` `ABC1-P2B` `ABC1-P2T`
   <date>          <int>      <int>      <int>      <int>
 1 2000-01-01          1        101         11        201
 2 2000-02-01          2        102         12        202
 3 2000-03-01          3        103         13        203
 4 2000-04-01          4        104         14        204
 5 2000-05-01          5        105         15        205
 6 2000-06-01          6        106         16        206
 7 2000-07-01          7        107         17        207
 8 2000-08-01          8        108         18        208
 9 2000-09-01          9        109         19        209
10 2000-10-01         10        110         20        210
tibble(Datetime=seq(截至日期(“2000/1/1”),by=“month”,length.out=10),
`ABC1-P1B`=序列(1,10),
`ABC1-P1T`=序列(101110),
`ABC1-P2B`=序列(11,20),
`ABC1-P2T`=序号(201210))
#一个tibble:10x5
日期时间'ABC1-P1B``ABC1-P1T``ABC1-P2B``ABC1-P2T`
1 2000-01-01          1        101         11        201
2 2000-02-01          2        102         12        202
3 2000-03-01          3        103         13        203
4 2000-04-01          4        104         14        204
5 2000-05-01          5        105         15        205
6 2000-06-01          6        106         16        206
7 2000-07-01          7        107         17        207
8 2000-08-01          8        108         18        208
9 2000-09-01          9        109         19        209
10 2000-10-01         10        110         20        210
希望输出表为:

tibble(Datetime = c(seq(as.Date("2000/1/1"), by = "month", length.out = 10),
                    seq(as.Date("2000/1/1"), by = "month", length.out = 10)), 
       `ID` = rep(c("ABC1-P1", "ABC1-P2"),10),
       `B` = c(seq(1,10), seq(11,20)),
       `T` = c(seq(101,110), seq(201,210))
      )

# A tibble: 20 x 4
   Datetime   ID          B     T
   <date>     <chr>   <int> <int>
 1 2000-01-01 ABC1-P1     1   101
 2 2000-02-01 ABC1-P2     2   102
 3 2000-03-01 ABC1-P1     3   103
 4 2000-04-01 ABC1-P2     4   104
 5 2000-05-01 ABC1-P1     5   105
 6 2000-06-01 ABC1-P2     6   106
 7 2000-07-01 ABC1-P1     7   107
 8 2000-08-01 ABC1-P2     8   108
 9 2000-09-01 ABC1-P1     9   109
10 2000-10-01 ABC1-P2    10   110
11 2000-01-01 ABC1-P1    11   201
12 2000-02-01 ABC1-P2    12   202
13 2000-03-01 ABC1-P1    13   203
14 2000-04-01 ABC1-P2    14   204
15 2000-05-01 ABC1-P1    15   205
16 2000-06-01 ABC1-P2    16   206
17 2000-07-01 ABC1-P1    17   207
18 2000-08-01 ABC1-P2    18   208
19 2000-09-01 ABC1-P1    19   209
20 2000-10-01 ABC1-P2    20   210
tibble(Datetime=c(按日期(“2000/1/1”),by=“month”,length.out=10),
seq(截至日期(“2000/1/1”),by=“month”,length.out=10),
`ID`=rep(c(“ABC1-P1”、“ABC1-P2”),10),
`B`=c(序列(1,10),序列(11,20)),
`T`=c(序列号(101110),序列号(201210))
)
#一个tibble:20x4
日期时间ID B T
1 2000-01-01 ABC1-P1 1 101
2 2000-02-01 ABC1-P2 2 102
3 2000-03-01 ABC1-P1 3 103
4 2000-04-01 ABC1-P2 4 104
5 2000-05-01 ABC1-P1 5 105
6 2000-06-01 ABC1-P2 6 106
7 2000-07-01 ABC1-P1 7 107
8 2000-08-01 ABC1-P2 8 108
9 2000-09-01 ABC1-P1 9 109
10 2000-10-01 ABC1-P2 10 110
11 2000-01-01 ABC1-P1 11 201
12 2000-02-01 ABC1-P2 12 202
13 2000-03-01 ABC1-P1 13 203
14 2000-04-01 ABC1-P2 14 204
15 2000-05-01 ABC1-P1 15 205
16 2000-06-01 ABC1-P2 16 206
17 2000-07-01 ABC1-P1 17 207
18 2000-08-01 ABC1-P2 18 208
19 2000-09-01 ABC1-P1 19 209
20 2000-10-01 ABC1-P2 20 210

我们可以在
名称\u sep

library(dplyr)
library(tidyr)
df1 %>% 
   pivot_longer(cols = -Datetime, names_to = c("ID", '.value'),
          names_sep = "(?<=\\d)(?=[A-Z]$)")
库(dplyr)
图书馆(tidyr)
df1%>%
pivot_longer(cols=-Datetime,names_to=c(“ID”,“.value”),

names_sep=“(?这非常有效!谢谢!
# A tibble: 10 x 4
#   Datetime   ID          B     T
#   <date>     <chr>   <int> <int>
# 1 2000-01-01 ABC1-P1     1   101
# 2 2000-02-01 ABC1-P1     2   102
# 3 2000-03-01 ABC1-P1     3   103
# 4 2000-04-01 ABC1-P1     4   104
# 5 2000-05-01 ABC1-P1     5   105
# 6 2000-06-01 ABC1-P1     6   106
# 7 2000-07-01 ABC1-P1     7   107
# 8 2000-08-01 ABC1-P1     8   108
# 9 2000-09-01 ABC1-P1     9   109
#10 2000-10-01 ABC1-P1    10   110
df1 <- tibble(Datetime = seq(as.Date("2000/1/1"), by = "month", length.out = 10), 
           `ABC1-P1B` = seq(1,10),
           `ABC1-P1T` = seq(101,110))