R语言使用ifelse、is.na替换dataframe中q3列NA值的实现问题
你可以通过嵌套条件判断+日期格式正则匹配实现需求,具体代码如下:
基础R实现(无需加载额外包)
核心逻辑是在替换q3的NA值前,先判断对应times_30的内容是否符合日期格式:
df$q3 <- ifelse( is.na(df$q3), # 匹配dd/mm/yyyy格式的日期内容 ifelse(grepl("^\\d{2}/\\d{2}/\\d{4}$", df$times_30), "No answer", df$times_30), df$q3 )
如果你的日期存在单数字日/月的情况(比如1/2/2021),可以把正则调整为^\\d{1,2}/\\d{1,2}/\\d{4}$适配该场景。
dplyr实现(代码可读性更高)
如果你习惯使用tidyverse生态的函数,可以用case_when实现相同逻辑:
library(dplyr) df <- df %>% mutate(q3 = case_when( # q3非空直接保留原值 !is.na(q3) ~ q3, # times_30为日期时替换为No answer grepl("^\\d{2}/\\d{2}/\\d{4}$", times_30) ~ "No answer", # 其他情况用times_30的内容填充 TRUE ~ times_30 ))
内容的提问来源于stack exchange,提问作者Meli
相关产品推荐
相关产品推荐

