将数值分配给因子列

时间:2020-05-06 03:40:52

标签: r

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

我希望将因子转换为水平的数值数据。

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

我想为这些因素分配数值,其中 远是1, 附近是2 开启为3。

在下面使用这两个代码

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

OR

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

产生NA胁迫。

我尝试将这些因素设置为水平,但这并未分配数值。我需要将此序数值用作序数模型。如果您有任何建议,请让我知道。谢谢。

2 个答案:

答案 0 :(得分:2)

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 :: recode

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

base :: factor

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

答案 1 :(得分:1)

Base R解决方案:

Prox_df$Prox <- as.integer(as.factor(Prox_df$Prox))

使用@HNSKD中的数据(谢谢):

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