You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:使用paste拼接变量时去除NA,返回空字符串

解决R语言中含NA变量的拼接问题

要实现当a或b为NA时拼接结果为空字符串,否则拼接两个变量的需求,这里提供几种简洁的实现方式:

方法1:dplyr + case_when(适配tidyverse风格)

利用if_any快速判断是否存在NA,再结合case_when做分支处理:

library(dplyr)

df <- tibble(
  a = c(2010, 2019, NA, 2022),
  b = c(NA, 2018, 2022, NA)
)

df |>
  mutate(
    combined = case_when(
      # 只要a或b是NA,就返回空字符串
      if_any(c(a, b), is.na) ~ "",
      # 无NA时正常拼接,可修改sep参数调整分隔符
      .default = paste(a, b, sep = " ")
    )
  )

运行结果:

# A tibble: 4 × 3
      a     b combined
  <dbl> <dbl> <chr>   
1  2010    NA ""      
2  2019  2018 "2019 2018"
3    NA  2022 ""      
4  2022    NA ""      

方法2:基础R实现(无需额外包)

用is.na判断NA,结合ifelse直接赋值:

df$combined <- ifelse(is.na(df$a) | is.na(df$b), "", paste(df$a, df$b))

方法3:结合glue包实现

你之前用str_glue出错是因为语法有误(需用大括号包裹变量),且未处理NA场景。正确用法是先判断NA,再用glue拼接:

library(glue)
library(dplyr)

df |>
  mutate(
    combined = case_when(
      if_any(c(a, b), is.na) ~ "",
      .default = glue("{a} {b}")
    )
  )

注意点

  • 如果不需要拼接时的空格,可修改paste的sep参数为sep = "",或者glue里直接写"{a}{b}"。
  • 若使用旧版dplyr(低于1.0.0),可以用is.na(a) | is.na(b)替代if_any(c(a, b), is.na)。

内容的提问来源于stack exchange,提问作者Moses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:06:14