gpt4 book ai didi

重新编码具有许多值的数值变量,包括 NA

转载 作者:行者123 更新时间:2023-12-04 08:06:15 29 4
gpt4 key购买 nike

如何重新编码具有许多值(包括缺失值)的数值变量,以获得数字 0:n-1哪里n是唯一值的数量,包括 NA ,整齐?
例子:

df <- tibble(x = c(1000, 1000, NA, 1001, 1002, 1003, NA, 1003))
所需的输出(尽管它可以是任何重新编码方案,只要值为 0:n-1 ):
# A tibble: 8 x 2
x y
<dbl> <dbl>
1 1000 0
2 1000 0
3 NA 4
4 1001 1
5 1002 2
6 1003 3
7 NA 4
8 1003 3
我可以通过首先转换 x 以整洁的方式完成此操作到一个因子然后使用 fct_recode()使用命名列表(自动创建,因为记住 x 中有很多值),然后返回数字:
df <- df %>% mutate(x_fct = factor(case_when(
is.na(x) ~ "level_na",
TRUE ~ str_c("level_", x)
)))
x_levels <- levels(df$x_fct)
n_levels <- length(x_levels)
names(x_levels) <- as.character(0:(n_levels - 1))
df <- df %>%
mutate(y = as.numeric(fct_recode(x_fct, !!!x_levels)) - 1)
df
# A tibble: 8 x 3
x x_fct y
<dbl> <fct> <dbl>
1 1000 level_1000 0
2 1000 level_1000 0
3 NA level_na 4
4 1001 level_1001 1
5 1002 level_1002 2
6 1003 level_1003 3
7 NA level_na 4
8 1003 level_1003 3
但这似乎非常麻烦。当然有一种更简单的方法,最好是在单个管道中。

最佳答案

一种方法是使用 match + unique .您可以添加 sample添加随机性

library(dplyr)

df %>%
mutate(level = paste('level', x, sep = '_'),
y = match(x, sample(unique(x))) - 1)

# x level y
# <dbl> <chr> <dbl>
#1 1000 level_1000 4
#2 1000 level_1000 4
#3 NA level_NA 2
#4 1001 level_1001 0
#5 1002 level_1002 1
#6 1003 level_1003 3
#7 NA level_NA 2
#8 1003 level_1003 3

关于重新编码具有许多值的数值变量,包括 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66208228/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com