将带有日期的列转换为R中的行

假设我们在R中有这样一个data.frame:

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
amico1969 回答:将带有日期的列转换为R中的行

我们可以将gather转换为'long'格式,并使用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
,

使用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
本文链接:https://www.f2er.com/3142696.html

大家都在问