在 R 中将日期列转换为行

3
假设我们在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个回答

3

我们可以将数据转换为'长格式',然后使用 str_extractparse_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

2
使用 tidyr 的新函数 pivot_longer 是一种快速的方式,它可以让你在一步中改变数据形状并分割列。看一下列名:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接