在R中的函数内使用fct_recode

时间:2019-07-12 19:08:01

标签: r rstudio tidyverse forcats

我正在尝试在函数中使用fct_recode并给出错误 “错误:f必须是一个因素(或字符向量)。”

编辑:如果我运行此命令,那么它将直接起作用,不确定如何将其合并到函数中

  df[,"c1"] <- as.character(df$c1)
  df[,"c1"] <- fct_recode(df$c1,
                               "Female" = "2",
                               "Male" = "1")

当我将df [,c1]更改为df $ c1时,它起作用了,不知道为什么&不确定如何将其构建到我的recode函数中

我正在尝试的代码

recode <- function(data, var1) 
  {
       data[,var1]
       data[,var1] <- as.character(data[,var1])
       data[,var1] <- fct_recode(data[,var1],
                                  "Yes" = "1",
                                 "No" = "2")
       data[,var1] <- fct_explicit_na(data[,var1],"No")
       return(data)
  }

recode(df,"c1")

使用以下命令找到的df数据集的c1列的结构(它是一个大数据集,因此共享一列的dput,请问是否有问题)

df[,"c1"] %>% head(10) %>% dput()

structure(list(c1 = c(2, 1, 2, 1, 1, 2, 2, 1, 1, 2)), notes = c("b15 urinary creatinine is in mg/dl", 
"3", "the province variable is related to province", "the stratum variable is about urban and rural classification"
), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))

str(df$c1) #gives below output
num [1:5610] 2 1 2 1 1 2 2 1 1 2 ...
 - attr(*, "label")= chr "C1"
 - attr(*, "format.stata")= chr "%10.0g"

该功能必须失败的任何原因

1 个答案:

答案 0 :(得分:0)

当我使用[[表示法引用该列时,它不知道为什么当我使用df [,var1]表示法时它失败,但是工作代码如下

recode <- function(data, var1) 
  {
       data[[var1]] <- as.character(data[[var1]])
       data[[var1]] <- fct_recode(data[[var1]],
                               "Female" = "2",
                               "Male" = "1"
                               )
       data[[var1]] <- fct_explicit_na(data[[var1]],"No")
       return(data[[var1]])
  }

recode(df,"c1")