首页 > 解决方案 > 使用 mutate() 在每个变量中将 NA 隐藏到单独的级别

问题描述

我也有 12 个包含 NA 值的变量。我需要将 NA 转换为单独的级别。某些变量的水平值不同。以下是代码:

Replace_NAs <- function(colindex, na_level){
  cname <- colnames(tr[colindex])
  tr <- tr %>% mutate(cname = as.factor(replace(cname, is.na(cname), na_level)))
  return(tr)
}

for (i in 1:12) {
  if(i == 5){
      na_level <- 3;
      tr <- Replace_NAs(i,na_level);
  }
  else if(i == 11){
    na_level <- 5;
    tr <- Replace_NAs(i,na_level);
  }
  else if(i == 4|6|8){
    na_level <- 1;
    tr <- Replace_NAs(i,na_level);
  }
  else{
    na_level <- 20;
    tr <- Replace_NAs(i,na_level);
  }
}

请帮我。谢谢。

标签: rfor-loopdplyr

解决方案


正如约翰在评论中提到的那样,您应该包含一个可重现的示例。没有它,我们只能猜测您到底想要什么。

也就是说,这是我对什么会帮助你的猜测:

df %>%
    mutate_at(vars(5), ~ replace_na(., 3)) %>%
    mutate_at(vars(11), ~ replace_na(., 5)) %>%
    mutate_at(vars(4, 6, 8) ~ replace_na(., 1)) %>%
    mutate_at(vars(-c(4, 5, 6, 8, 11)), ~ replace_na(., 20))

再次,请提供一个可重复的示例,其中包含数据和您想要的输出。对您的问题的更强有力的答案是探索将预期开关列表应用到您的数据帧,但这在这里有点过分了。


推荐阅读