处理 QY 数据:如何定义 QY 因素的水平

问题描述 投票:0回答:1

我有一个包含“年”、“季度”、“QY”列和许多数值变量的数据集。

#example dataset
Year = c("2019", "2020", "2021",
         "2019", "2020", "2021",
         "2019", "2020", "2021",
         "2019", "2020", "2021")
Quarter = c("1Q", "1Q", "1Q",
            "2Q", "2Q", "2Q",
            "3Q", "3Q", "3Q",
            "4Q", "4Q", "4Q")
QY = c("1Q19", "1Q20", "1Q21",
                   "2Q19", "2Q20", "2Q21",
                   "3Q19", "3Q20", "3Q21",
                   "4Q19", "4Q20", "4Q21")
VAR1 = c(10, 20, 30,
         30, 20, 25,
         27, 10, 15,
         13, 34, 25)

df <- data.frame(Year, Quarter, QY, VAR1)

我需要将所有字符列转换为因子。 “年份”和“季度”列在转换时似乎具有正确的级别,但 QY 列则不然,因此我手动定义了它。

df$Year <- as.factor(df$Year)
df$Quarter <- as.factor(df$Quarter) 
df$QY <- as.factor(df$QY) 

#check the level, QY is incorrect
sapply(df, str)

#manually defined QY level
df$QY <- factor(df$QY,
                levels = c("1Q19", "2Q19", "3Q19", "4Q19",
                           "1Q20",  "2Q20", "3Q20", "4Q20",
                           "1Q21",  "2Q21", "3Q21", "4Q21"))

有没有一种更有效的方法,让 R 可以自动识别这些 QY 的级别,而无需我手动定义?尤其是随着QY的增长,我需要从2019年开始定义它。

我认为不需要将任何“年份”、“季度”、“QY”列更改为时间变量,但请澄清我是否应该这样做。我的计算和数据可视化需求主要是逐年变化或逐年变化。

r tidyverse categorical-data forcats
1个回答
0
投票

对于示例数据,您可以按

Year
Quarter
排列数据,然后使用
forcats::fct_inorder
设置
QY
的级别:

library(dplyr, warn=FALSE)
library(forcats)

df <- df |> 
  arrange(Year, Quarter) |> 
  mutate(QY = fct_inorder(QY))

levels(df$QY)
#>  [1] "1Q19" "2Q19" "3Q19" "4Q19" "1Q20" "2Q20" "3Q20" "4Q20" "1Q21" "2Q21"
#> [11] "3Q21" "4Q21"

或者使用基本 R 你可以达到相同的结果,如下所示:

df <- df[order(df$Year, df$Quarter), ]
df$QY <- factor(df$QY, levels = unique(df$QY))

levels(df$QY)
#>  [1] "1Q19" "2Q19" "3Q19" "4Q19" "1Q20" "2Q20" "3Q20" "4Q20" "1Q21" "2Q21"
#> [11] "3Q21" "4Q21"
© www.soinside.com 2019 - 2024. All rights reserved.