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

使用dplyr根据两字符列的差异生成新列的实现方法

使用dplyr根据两字符列的差异生成新列的实现方法

我来帮你搞定这个需求~你想要从char_2列里提取出那些不在char_1列中出现的元素,最后用|拼接成新的dif_char列,用dplyr配合字符串处理函数就能轻松实现,下面是完整的可运行代码和步骤解释:

首先先定义你的原始数据:

library(dplyr)
library(stringr) # 依赖这个包处理字符串分割和拼接

raw_data <- data.frame(
  cat = c("a"),
  char_1 = c("1kg|2kg"),
  char_2 = c("0kg|1kg|8kg")
)

接下来是核心的处理代码:

wished_df <- raw_data %>%
  rowwise() %>% # 必须按行处理,保证每一行的字符串独立计算
  mutate(
    # 将两个字符串按|分割成字符向量
    vec1 = str_split(char_1, "\\|")[[1]],
    vec2 = str_split(char_2, "\\|")[[1]],
    # 计算vec2相对于vec1的差集,再拼接回|分隔的字符串
    dif_char = str_c(setdiff(vec2, vec1), collapse = "|")
  ) %>%
  ungroup() %>% # 取消行分组,恢复数据框默认的列处理模式
  select(-vec1, -vec2) # 移除临时生成的中间列

# 查看结果
wished_df

运行后你会得到目标的结果:

cat char_1     char_2     dif_char
1   a 1kg|2kg 0kg|1kg|8kg 0kg|8kg

我再拆解下关键步骤:

  • rowwise():这一步很重要,因为我们需要对每一行的char_1和char_2分别处理,而不是把整个列的所有字符串混在一起计算
  • str_split(..., "\\|"):把用|分隔的字符串拆成字符向量,注意|是正则表达式里的特殊字符,所以要加两个反斜杠转义
  • setdiff(vec2, vec1):直接求差集,自动筛选出char_2有但char_1没有的元素
  • str_c(..., collapse = "|"):把差集的元素重新拼接回你需要的|分隔格式

如果你的数据有多行记录,这个方法也完全适用,rowwise()会自动逐行处理每一行的字符串对。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:03:02