【问题标题】:Is there R code to replace empty cells with 0's but keep populated cells with their original value? [duplicate]是否有 R 代码用 0 替换空单元格但保留填充单元格的原始值? [复制]
【发布时间】:2021-07-27 22:53:24
【问题描述】:

如果变量 A == 0,我想用 0 替换变量 B 和变量 C 中的一些空单元格。如果变量 A 不等于 0,我希望变量 B 和变量 C 保持不变。我在下面创建了一个表格,并附上了一个屏幕截图来帮助解释我的意思。

Variable A Variable B Variable C
0
0
1 3 8

本质上,如果变量 A == 0,我希望变量 B == 0 和变量 C == 0,但如果变量 A 有值,那么我希望变量 A、变量 B 和变量 C 保持其原始值.

截图帮助解释:https://i.stack.imgur.com/OihrX.png

【问题讨论】:

    标签: r


    【解决方案1】:

    使用dplyr

    library(dplyr)    
    df <- df %>%
        mutate(across(-1,  ~ as.numeric(replace(., . == '', 0))))
           
    

    -输出

    df
    # A tibble: 3 x 3
    #  Variable.A Variable.B Variable.C
    #       <int>      <dbl>      <dbl>
    #1          0          0          0
    #2          0          0          0
    #3          1          3          8
    

    数据

    df <- structure(list(Variable.A = c(0L, 0L, 1L), Variable.B = c("", 
    "", "3"), Variable.C = c("", "", "8")), row.names = c(NA, -3L
    ), class = c("tbl_df", "tbl", "data.frame"))
    

    【讨论】:

      【解决方案2】:

      更新 感谢 Gregor Thomas 的关注

      df$Variable.B <- ifelse(df$Variable.A==0, 0,df$Variable.B)
      df$Variable.C <- ifelse(df$Variable.A==0, 0,df$Variable.C)
      

      第一个答案不考虑变量 == 0 对于空白单元格:

      df$Variable.B <- sub("^$", "0", df$Variable.B)
      df$Variable.C <- sub("^$", "0", df$Variable.C)
      

      输出:

        Variable.A Variable.B Variable.C
             <int> <chr>      <chr>     
      1          0 0          0         
      2          0 0          0         
      3          1 3          8  
      

      数据:

      structure(list(Variable.A = c(0L, 0L, 1L), Variable.B = c("", 
      "", "3"), Variable.C = c("", "", "8")), row.names = c(NA, -3L
      ), class = c("tbl_df", "tbl", "data.frame"))
      

      【讨论】:

      • 这将替换所有空白,忽略 OP 的要求,即这应该发生在行 “如果变量 A == 0” 上。而且如果你想替换空格,使用== ""会比正则表达式更高效。
      • 感谢格雷戈尔·托马斯。我已经更新了。
      • @TarJae 我使用了代码df$Variable.B &lt;- sub("^$", "0", df$Variable.B)df$Variable.C &lt;- sub("^$", "0", df$Variable.C) 并且它有效,但我仍然不明白它为什么有效。有人能解释这段代码在做什么吗?再次感谢您!
      【解决方案3】:
      rows_to_replace <- df$Variable.A == 0
      df[rows_to_replace, c("Variable.B", "Variable.C")] <- 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        相关资源
        最近更新 更多