在 R 中,关于将变量类型更改为 'factor' 的问题

In R , a question about change variable type to 'factor'

我使用下面的代码将变量 'period' 从 'character' 更改为 'factor'(并且因子水平序列与 'period' 文本中包含的顺序相匹配)。

以下是当前代码。有可用的功能吗?

library(tidyverse)

raw_data <- 
  data.frame(
    period=c('Q2','Q1','8','7','40','41'),
    amount=c(1:6)
  ) 


arranged_data <- raw_data %>% arrange(match(parse_number(period),c(1:41))) %>% 
  mutate(period=fct_inorder(period))
> raw_data %>% mutate(period = factor(period)) %>% as_tibble()
# A tibble: 6 × 2
  period amount
  <fct>   <int>
1 Q2          1
2 Q1          2
3 8           3
4 7           4
5 40          5
6 41          6

如您所见,您只需调用向量上的 factor() 函数即可将其转换为因子。

lvls <- unique(raw_data$period)
raw_data$period <- factor(raw_data$period, levels = lvls[order(parse_number(lvls))])

导致:

levels(raw_data$period )
[1] "Q1" "Q2" "7"  "8"  "40" "41"

我相信这应该有效!问题是 fct_inorder 不会更改列类型,因此您应该先将列转换为因子:

library(tidyverse)

raw_data <- 
   data.frame(
      period=c('Q2','Q1','8','7','40','41'),
      amount=c(1:6)) 
    
arranged_data <- raw_data %>% arrange(match(parse_number(period), c(1:41))) %>%
   mutate(period = as.factor(period)) %>%
   mutate(period=fct_inorder(period))