r-根据另一列中的值将空白替换为0

  • 本文关键字:空白 替换 一列 r dplyr
  • 更新时间 :
  • 英文 :


我有一个如下的df:

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

如果CAR列为"否",我想将BOAT列中的NA替换为"0",这样我就可以有这样的东西:

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

我想了这样的想法,但没有奏效:

NEW_df %>%
mutate(across(BOAT, ~ if_else(CAR == NO & is.na(.), 0, .)))

是否也可以将替换后的值放在一个新列中。

我们可以在base R中轻松做到这一点

NEW_df$BOAT[is.na(NEW_df$BOAT) & NEW_df$CAR == "NO"] <- 0

%>%不进行就地更换。我们必须用NEW_df <-重新分配。此外,如果是单列,则不需要across和语法错误(未引用NO(

library(dplyr)
NEW_df <- NEW_df %>%
mutate(BOAT = replace(BOAT, CAR == "NO" & is.na(BOAT), 0))

使用dplyr的替代方案。。。

library(dplyr)
NEW_df <- 
NEW_df %>% 
mutate(BOAT = if_else(CAR=='NO' & is.na(BOAT), 0, BOAT))

您也可以使用data.table

library(data.table)
NEW_df <- as.data.table(NEW_df)
NEW_df[is.na(BOAT) & CAR == "NO", BOAT := 0]

最新更新