【问题标题】:Replacing NA's by column specific condition [duplicate]按列特定条件替换 NA [重复]
【发布时间】:2023-03-21 23:55:01
【问题描述】:
df <- data.frame(CAR = c(1,1,3,9,1),
                               BIKE = c(2,NA,4,NA,9),
                               PLANE = c(8,NA,6,7,9),
                               BOAT = c(1,2,NA,4,NA),
                               SCOOTER = c(2,3,6,9,NA))

嗨,我有一个这样的 df。我想在“CAR”值仅为 1 的每一行中替换 NA 值;所以你会得到这样的东西。

NEW_df <- data.frame(CAR = c(1,1,3,9,1),
                                         BIKE = c(2,0,4,NA,9),
                                         PLANE = c(8,0,6,7,9),
                                       BOAT = c(1,2,NA,4,0),
                                       SCOOTER = c(2,3,6,9,0))

我知道要在整个数据集中替换 NA,但无法解决这个问题。请对此有任何帮助。我试过了:

NEW_DF <- df %>% mutate(across(c(-CAR), ~replace(.,CAR == 1, NA)))

【问题讨论】:

    标签: r


    【解决方案1】:

    我们也可以使用替换:

    libary(dplyr)
    
    df%>%mutate(across(-CAR, ~replace(., is.na(.) & CAR==1, 0)))
    

    【讨论】:

    • 我的朋友又好又简洁。
    【解决方案2】:

    这是另一种方式-

    df[-1][df$CAR == 1 & is.na(df[-1])] <- 0
    df
    
    #  CAR BIKE PLANE BOAT SCOOTER
    #1   1    2     8    1       2
    #2   1    0     0    2       3
    #3   3    4     6   NA       6
    #4   9   NA     7    4       9
    #5   1    9     9    0       0
    

    【讨论】:

    • 我通常假设(显然是错误的)chained-[ 并不总是在我打算这样做的地方使用[&lt;-
    【解决方案3】:

    dplyr

    library(dplyr)
    df %>%
      mutate(across(-CAR, ~ if_else(CAR == 1 & is.na(.), 0, .)))
    #   CAR BIKE PLANE BOAT SCOOTER
    # 1   1    2     8    1       2
    # 2   1    0     0    2       3
    # 3   3    4     6   NA       6
    # 4   9   NA     7    4       9
    # 5   1    9     9    0       0
    

    基础R

    df[,-1] <- lapply(df[,-1], function(x) ifelse(df$CAR == 1 & is.na(x), 0, x))
    df
    #   CAR BIKE PLANE BOAT SCOOTER
    # 1   1    2     8    1       2
    # 2   1    0     0    2       3
    # 3   3    4     6   NA       6
    # 4   9   NA     7    4       9
    # 5   1    9     9    0       0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-29
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 2021-06-28
      • 2022-01-23
      相关资源
      最近更新 更多