我想为数据集中由 core.vars 定义的以下变量重新编码以下值 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
or mutate
对于每个感兴趣的变量,然后重新编码值。但他们失败了。
temp.df <- temp.df %>%
mutate_at(.vars %in% (core.vars)), '< 4' = "-1", '4' = "0", '> 4' = "1")
错误:“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")
继承(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,dots) 中的错误:列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,dots) 中的错误:评估错误:情况 1 (recode(mpg,
< 4= -1,
0= 0,
>4= 1)
) 必须是双面公式,而不是双精度公式。另外:警告消息:在recode.numeric(mpg,< 4
= -1, 0
= 0, >4
= 1) : 通过强制引入的 NA
论坛上之前的问题包括如何对单个变量执行此操作,但是正如前面提到的,我有 100 个变量和 300 个样本,因此不能逐行单独输入它们。
理想情况下,最好不要创建单独的数据框然后进行连接,或者像 mutate 那样创建多个单独的变量。
我确信有一个 for 循环和/或 ifelse 方法,但正在尝试使用 tidyverse 来实现目标。任何的意见都将会有帮助。