通过修改列进行更长时间的透视

Pivot Longer with Modification of Columns

我有以下格式的数据:

(data <- tribble(
  ~Date, ~ENRSxOPEN, ~ENRSxCLOSE, ~INFTxOPEN, ~INFTxCLOSE,
  "1989-09-11",82.97,82.10,72.88,72.56,
  "1989-09-12",83.84,83.96,73.52,72.51,
  "1989-09-13",83.16,83.88,72.91,72.12))
# A tibble: 3 x 5
  Date       ENRSxOPEN ENRSxCLOSE INFTxOPEN INFTxCLOSE
  <chr>          <dbl>      <dbl>     <dbl>      <dbl>
1 1989-09-11      83.0       82.1      72.9       72.6
2 1989-09-12      83.8       84.0      73.5       72.5
3 1989-09-13      83.2       83.9      72.9       72.1

为了便于分析,我想将此小标题转为以下格式:

tribble(
  ~Ticker, ~Date, ~OPEN, ~CLOSE,
  "ENRS","1989-09-11",82.97,82.10,
  "ENRS","1989-09-12",83.84,83.96,
  "ENRS","1989-09-13",83.16,83.88,
  "INFT","1989-09-11",72.88,72.56,
  "INFT","1989-09-12",73.52,72.51,
  "INFT","1989-09-13",72.91,72.12)
# A tibble: 3 x 5
  Date       ENRSxOPEN ENRSxCLOSE INFTxOPEN INFTxCLOSE
  <chr>          <dbl>      <dbl>     <dbl>      <dbl>
1 1989-09-11      83.0       82.1      72.9       72.6
2 1989-09-12      83.8       84.0      73.5       72.5
3 1989-09-13      83.2       83.9      72.9       72.1

也就是说,我想将 Open/Close 价格与股票代码分开,并将后者作为一个全新的列放在开头。

我尝试使用函数 pivot_longer:

pivot_longer(data, cols = ENRSxOPEN:INFTxCLOSE)

虽然这进入了我想要实现的方向,但它并没有将价格分开并将每个代码的价格保持在一行中。 有没有办法向 pivot_longer() 添加额外的参数来实现这一点?

pivot_longer(data, -Date, names_to = c('Ticker', '.value'), names_sep = 'x')

# A tibble: 6 x 4
   Date Ticker  OPEN CLOSE
  <dbl> <chr>  <dbl> <dbl>
1  1969 ENRS    83.0  82.1
2  1969 INFT    72.9  72.6
3  1968 ENRS    83.8  84.0
4  1968 INFT    73.5  72.5
5  1967 ENRS    83.2  83.9
6  1967 INFT    72.9  72.1