У меня есть фрейм данных в широком формате.
df <- data.frame(
time = as.Date('2009-01-01') + 0:5,
D.13.JA = rnorm(6, 0, 1),
D.40.JA = rnorm(6, 0, 1),
D.90.JA = rnorm(6, 0, 1),
A.13.JA = rnorm(6, 0, 1),
R.13.JA = rnorm(6, 0, 1)
)
time D.13.JA D.40.JA D.90.JA A.13.JA R.13.JA
1 2009-01-01 -2.2529442 0.1341954 0.3024757 -0.465533145 -0.49755117
2 2009-01-02 1.0698570 -1.3597724 0.6607091 0.001913148 0.92522135
3 2009-01-03 1.7558374 -1.0280084 -0.1446586 -0.355776775 0.12556738
4 2009-01-04 -0.2571767 -0.9065826 0.9340532 -0.150408270 -0.57386938
5 2009-01-05 0.2389923 -1.2818616 0.5643812 -1.272623868 -0.05700965
6 2009-01-06 1.6444592 -1.5610767 -1.4377561 -0.701273356 0.29777858
Я ожидаю преобразовать фрейм данных в этот формат:
time DirDegree Type Wh
1 2009-01-01 D.13 JA -2.2529442
2 2009-01-02 D.13 JA 1.0698570
3 2009-01-03 D.13 JA 1.7558374
4 2009-01-04 D.13 JA -0.2571767
5 2009-01-05 D.13 JA 0.2389923
6 2009-01-06 D.13 JA 1.6444592
Пока я успешнопреобразовал его в аккуратный формат
df.tidy = df %>%
gather(key, Wh, -time) %>%
separate(key, c("Dir", "Degree", "Type"), "\\.")
time Dir Degree Type Wh
1 2009-01-01 D 13 JA -1.18105757
2 2009-01-02 D 13 JA 1.34437449
3 2009-01-03 D 13 JA -0.08451173
4 2009-01-04 D 13 JA -1.88959285
5 2009-01-05 D 13 JA 1.25388470
6 2009-01-06 D 13 JA -1.24286611
Я попытался отформатировать его на основе этого ответа
test1 = df %>%
gather(key, value, -time) %>%
extract(key, c("DirDeg", "Type"), "(..\\..)\\.(.)")
test2 = df %>%
gather(key, value, -time) %>%
extract(key, c("DirDeg", "Type"), "(\\.)\\.()")
оба из которых дают мне
time DirDeg Type value
1 2009-01-01 <NA> <NA> -1.18105757
2 2009-01-02 <NA> <NA> 1.34437449
3 2009-01-03 <NA> <NA> -0.08451173
4 2009-01-04 <NA> <NA> -1.88959285
5 2009-01-05 <NA> <NA> 1.25388470
6 2009-01-06 <NA> <NA> -1.24286611
7 2009-01-01 <NA> <NA> -0.55782526