【问题标题】:Replace NAs in columns with specific variable names用特定变量名替换列中的 NA
【发布时间】:2020-06-18 00:25:15
【问题描述】:

我有一个包含 14 列的数据框。 12 列以变量名.T 结尾,我只想在这些列中将 NA 替换为 0。我尝试按照this post 中的建议使用mutate_if(),但我收到错误消息Error: No tidyselect variables were registered Callrlang::last_error()to see a backtrace

我的代码(带示例数据)如下:

 library(tibble)

 mydf <- tribble(~Var1, ~Var2.a, ~Var3.a,
                 "A", NA, 1,
                 NA, NA, NA,
                 "C", 3, 3,
                 NA, NA, NA)

 newdf <- mydf %>%
   mutate_if(contains(".a"), ~replace_na(., 0))

错误:没有注册 tidyselect 变量 致电rlang::last_error() 查看回溯

如果可能,我想使用dplyr

【问题讨论】:

  • 自我宣传mde::recode_na_as(mydf,0,subset_df=T,tidy=T,pattern_type="ends_with",pattern=".a")

标签: r dataframe dplyr na missing-data


【解决方案1】:

你应该使用mutate_at,同时在vars()中包含列名

library(dplyr)
mydf %>% mutate_at(vars(contains(".a")), replace_na, 0)

#  Var1  Var2.a Var3.a
#  <chr>  <dbl>  <dbl>
#1 A          0      1
#2 NA         0      0
#3 C          3      3
#4 NA         0      0

【讨论】:

    【解决方案2】:

    你必须使用mutate_at:

    newdf <- mydf %>%
       mutate_at(vars(matches("\\.a")), ~replace_na(., 0))
    

    【讨论】:

      【解决方案3】:

      在基础 R 中,您可以使用 grep

      r <- grep("\\.a", names(mydf))
      mydf[r][is.na(mydf[r])] <- 0
      
      # # A tibble: 4 x 3
      #   Var1  Var2.a Var3.a
      #   <chr>  <dbl>  <dbl>
      # 1 A          0      1
      # 2 NA         0      0
      # 3 C          3      3
      # 4 NA         0      0
      

      【讨论】:

        【解决方案4】:

        最简单的方法是使用 is.na。例如:

        df$x[is.na(df$x] <- 0
        

        您也可以使用 df[,2:6] 一次对多列执行此操作(例如,第 2 到 6 列)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-25
          • 1970-01-01
          • 2022-12-14
          • 2020-03-24
          • 2017-07-26
          • 2019-02-03
          相关资源
          最近更新 更多