我想为数据集中由core.vars定义的以下变量重新编码以下值<4 = -1,4 = 0,> 4 = 1,并且仍将其余变量保留在数据框中。
temp.df <- as.tibble (mtcars)
other.vars <- c('hp', 'drat', 'wt')
core.vars <- c('mpg', 'cyl', 'disp')
temp.df <- rownames_to_column (temp.df, var ="cars_id")
temp.df <- temp.df %>% mutate_if (is.integer, as.numeric)
我尝试了多种方法来实现此目的。使用case_when
,mutate
,recode
,但没有运气。 recode
需要一个向量,所以我的想法是为每个感兴趣的变量使用case_when
或mutate
创建一个向量,然后重新编码值。但是他们失败了。
temp.df <- temp.df %>%
mutate_at(.vars %in% (core.vars)), '< 4' = "-1", '4' = "0", '> 4' = "1")
错误:“ temp.df <-temp.df%>%mutate_at(.vars%in%(core.vars))中的意外',
temp.df <- temp.df %>%
mutate_at(vars(one_of(core.vars)), '< 4' = "-1", '4' = "0", '> 4' = "1")
inherits(x,“ fun_list”)中的错误:参数“ .funs”丢失,没有默认值
temp.df <- temp.df %>%
mutate (temp.df, case_when (vars(one_of(core.vars)), recode ('< 4' = "-1", '4' = "0", '> 4' = "1")))
mutate_impl(.data,点)中的错误:
temp.df
列是不支持的类data.frame
temp.df <- temp.df %>%
case_when (vars(one_of(core.vars)), recode ('< 4' = "-1", '4' = "0", '> 4' = "1"))
recode.character(
< 4
=“ -1”,4
=“ 0”,> 4
=“ 1”)中的错误:缺少参数“ .x”,其中没有默认值
temp.df <- temp.df %>% rowwise() %>% mutate_at(vars (core.vars),
funs (case_when (
recode(., '< 4' = -1, '0' = 0, '>4' = 1)
))) %>%
ungroup()`
mutate_impl(.data,点)中的错误:评估错误:情况1(
recode(mpg,
<4= -1,
0= 0,
> 4= 1)
)必须是两个双面配方,不是双份。另外:警告消息:在recode.numeric(mpg,< 4
= -1,0
= 0,>4
= 1)中:强制引入的NAs
论坛上的先前问题包括如何对单个变量执行此操作,但是如上所述,我有100个变量和300个样本,因此不能逐行单独输入它们。
理想情况下,最好不要创建单独的数据框然后再进行联接,或者像mutate那样创建多个单独的变量。
我确定有一个for循环和/或ifelse方法,但是正在尝试使用tidyverse来实现目标。任何建议都会有所帮助。
答案 0 :(得分:4)
temp.df %>%
mutate_at(vars(one_of(core.vars)),
function(x) case_when(
x < 4 ~ -1,
x == 4 ~ 0,
x > 4 ~ 1
))
输出
# A tibble: 32 x 12
cars_id mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda RX4 1 1 1 110 3.9 2.62 16.5 0 1 4 4
2 Mazda RX4 Wag 1 1 1 110 3.9 2.88 17.0 0 1 4 4
3 Datsun 710 1 0 1 93 3.85 2.32 18.6 1 1 4 1
4 Hornet 4 Drive 1 1 1 110 3.08 3.22 19.4 1 0 3 1
5 Hornet Sportabout 1 1 1 175 3.15 3.44 17.0 0 0 3 2
6 Valiant 1 1 1 105 2.76 3.46 20.2 1 0 3 1
7 Duster 360 1 1 1 245 3.21 3.57 15.8 0 0 3 4
8 Merc 240D 1 0 1 62 3.69 3.19 20 1 0 4 2
9 Merc 230 1 0 1 95 3.92 3.15 22.9 1 0 4 2
10 Merc 280 1 1 1 123 3.92 3.44 18.3 1 0 4 4