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

在R语言数据框中实现条件替换:将R1值替换至符合条件的R2列

解决方案

你可以用以下两种方法实现需求:针对数据中R2列值为"-"或"NA"(字符串型)的行,将对应R1列的值替换到R2列。

方法1:Base R 实现

df <- data.frame(
  R1 = c("EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","EFTA : 0 / BAA/GBR : 0 / ES : 2","NA"),
  R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","NA","CEFTA : 0 / MSA/GB : 0 / TR : 0")
)

# 执行替换逻辑
df$R2 <- ifelse(df$R2 %in% c("-", "NA"), df$R1, df$R2)

# 查看最终结果
df

执行后输出结果:

R1                                 R2
1 EFTA : 0 / BAA/GBR : 0 / ES : 2 EFTA : 0 / BAA/GBR : 0 / ES : 2
2                               10 EFTA : 0 / BAA/GBR : 0 / ES : 2
3 EFTA : 0 / BAA/GBR : 0 / ES : 2 EFTA : 0 / BAA/GBR : 0 / ES : 2
4                                NA CEFTA : 0 / MSA/GB : 0 / TR : 0

方法2:dplyr 包实现

如果你习惯用tidyverse风格的代码,可使用dplyr的case_when函数:

library(dplyr)

df <- data.frame(
  R1 = c("EFTA : 0 / BAA/GBR : 0 / ES : 2", "10","EFTA : 0 / BAA/GBR : 0 / ES : 2","NA"),
  R2 = c("-", "EFTA : 0 / BAA/GBR : 0 / ES : 2","NA","CEFTA : 0 / MSA/GB : 0 / TR : 0")
)

# 执行替换逻辑
df <- df %>%
  mutate(R2 = case_when(
    R2 %in% c("-", "NA") ~ R1,
    TRUE ~ R2
  ))

# 查看最终结果
df

代码说明

  • 两种方法核心逻辑一致:判断R2的值是否属于c("-", "NA"),满足条件则用R1的值覆盖R2,否则保留R2原有值。
  • 注意数据中的"NA"是字符串类型,不是R原生的缺失值NA,因此判断时直接匹配字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:42:11