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

如何在R语言中对数据框字符串列去除连续重复元素并生成新列

如何在R语言中对数据框字符串列去除连续重复元素并生成新列

嘿,我完全get到你的需求啦——就是要把每个逗号分隔的国家字符串里,连续重复出现的同个国家去掉,只保留交替出现的内容对吧?比如原来一串重复的"Soome"只留一个,接着保留下一个不同的"Eesti",以此类推。下面给你两种实用的解决方法,你可以根据自己的习惯选:

首先先把你的示例数据再放一遍,方便我们测试:

col1 <- 1:2
col2 <- c("Eesti, Soome, Soome, Soome, Eesti, Soome, Eesti, Eesti, Eesti, Soome", 
          "Ukraina, Eesti, Luksembourg, Luksembourg, Eesti, Eesti, Eesti")
dt <- data.frame(PERSON_ID = col1, COUNTRIES = col2)

方法一:Base R 原生实现

我们可以写一个自定义函数,专门处理单个字符串的连续重复项,再用sapply批量应用到整个列上:

# 定义去除连续重复项的函数
remove_consec_duplicates <- function(x) {
  # 把字符串按逗号拆分,同时去掉每个元素的前后空格
  country_list <- trimws(strsplit(x, ",")[[1]])
  # 筛选出和前一个元素不同的项(第一个元素默认保留)
  filtered_countries <- country_list[c(TRUE, country_list[-1] != country_list[-length(country_list)])]
  # 把筛选后的列表重新合并成逗号分隔的字符串
  paste(filtered_countries, collapse = ", ")
}

# 给数据框添加新列COUNTRIES2
dt$COUNTRIES2 <- sapply(dt$COUNTRIES, remove_consec_duplicates)

运行后查看结果,就是你想要的效果啦:

> dt
  PERSON_ID                                                                 COUNTRIES                          COUNTRIES2
1         1 Eesti, Soome, Soome, Soome, Eesti, Soome, Eesti, Eesti, Eesti, Soome Eesti, Soome, Eesti, Soome, Eesti, Soome
2         2                Ukraina, Eesti, Luksembourg, Luksembourg, Eesti, Eesti, Eesti                Ukraina, Eesti, Luksembourg, Eesti

方法二:用tidyverse工具链实现

如果你平时习惯用dplyr和stringr这类工具,也可以用管道流的方式实现,代码更简洁直观:

library(dplyr)
library(stringr)
library(purrr) # 用到map_chr函数

dt <- dt %>%
  mutate(COUNTRIES2 = map_chr(str_split(COUNTRIES, ", "), ~{
    .x %>%
      trimws() %>% # 去除空格
      {.[c(TRUE, .[-1] != .[-length(.)])]} %>% # 筛选非连续重复项
      paste(collapse = ", ") # 合并回字符串
  }))

逻辑说明

两种方法的核心逻辑是一致的:

  1. 把逗号分隔的字符串拆分成单个国家的列表
  2. 去掉每个国家名称前后的空格(避免因为空格导致的判断错误)
  3. 筛选出和前一个元素不相同的项(第一个元素无条件保留)
  4. 把筛选后的列表重新合并成逗号分隔的字符串

这样处理后,就完美得到了你需要的COUNTRIES2列,连续重复的国家都被自动剔除啦~

备注:内容来源于stack exchange,提问作者Vida Beach

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:07:58