首页 > 解决方案 > 为因子列分配数值

问题描述

我一个月前发布了这个问题,在更新 R 和 Rstudio 之后,我现在遇到了同样的问题。

我正在寻找将因子转换为水平数值数据。

因此,Prox 的一列将显示为:Far, Far, Near, On, Far, Near, Far, Far, Near, Far。

我想为这些因素分配数值,其中 Far 为 1,Near 为 2,On 为 3。

使用以下任一代码

levels(Prox) levels(Prox) <- c(1, 2, 3)

或者

Prox_df <- Prox_df %>% mutate(Prox_df = case_when(Prox == "Far" ~ 3, Prox == "Near" ~ 2, Prox == "On" ~ 1))

导致NA强制。

我已经尝试为这些因素设置级别,但这并没有分配数值。我需要将这个水平的数值用于序数模型。如果您有任何建议,请让我知道。谢谢你。

标签: r

解决方案


dplyr::case_when应该工作正常。

数据:

Prox_df <- data.frame(Prox = c("Far", "Far", "Near", "On", "Far", "Near", "Far", "Far", "Near", "Far"), 
                      stringsAsFactors = FALSE)

dplyr::case_when

Prox_df <- Prox_df %>%
  mutate(Prox_df = case_when(Prox == "Far" ~ 1,
                             Prox == "Near" ~ 2,
                             Prox == "On" ~ 3))

dplyr::重新编码

Prox_df <- Prox_df %>%
  mutate(Prox_df = recode(Prox, "Far" = 1, "Near" = 2, On = 3))

基数::因子

Prox_df <- Prox_df %>%
  mutate(Prox_df = factor(Prox, levels = c("Far", "Near", "On"), labels = 1:3, ordered = TRUE))

推荐阅读