Преобразование столбцов с датой в строки в R - PullRequest
1 голос
/ 07 ноября 2019

Допустим, у нас есть data.frame в R, подобный этому:

d = data.frame('2019q1' = 1, '2019q2' =2, '2019q3' = 3)

, который выглядит следующим образом:

  X2019q1 X2019q2 X2019q3
1       1       2       3

Как я могу преобразовать его в такой вид:

Year    Quarter    Value
2019    1          1
2019    2          2
2019    3          3

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Мы можем gather в «длинный» формат и извлечь компоненты с помощью str_extract или parse_number

library(dplyr)
library(tidyr)
library(stringr)
gather(d) %>% 
   transmute(Year = readr::parse_number(key), 
             Quarter = as.numeric(str_extract(key, "(?<=q)\\d+$")), value)
#  Year Quarter value
#1 2019       1     1
#2 2019       2     2
#3 2019       3     3
0 голосов
/ 07 ноября 2019

Быстрый способ с более новой pivot_longer функцией tidyr, которая позволяет изменять форму данных и разбивать столбцы за один шаг. Взгляните на имена столбцов:

names(d)
#> [1] "X2019q1" "X2019q2" "X2019q3"

Вы увидите, что они начинаются с X, чтобы сделать имена действительными, а год и квартал разделены "q". Используйте это в качестве разделителя в pivot_longer, чтобы разделить год и квартал, а затем удалите не цифру из года. При желании вы можете использовать dplyr::mutate для преобразования столбцов в числовые значения.

library(tidyr)

d %>%
  pivot_longer(everything(), names_to = c("Year", "Quarter"), 
               names_sep = "q", values_to = "Value") %>%
  dplyr::mutate(Year = stringr::str_remove(Year, "\\D"))
#> # A tibble: 3 x 3
#>   Year  Quarter Value
#>   <chr> <chr>   <dbl>
#> 1 2019  1           1
#> 2 2019  2           2
#> 3 2019  3           3
...