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

如何在整个DataFrame中拆分字符串并保留唯一值?

如何将单列去重字符串的逻辑扩展到整个DataFrame?

我已经实现了针对单个DataFrame列的处理代码,能拆分含重复术语的字符串并保留唯一值,代码如下:

data$`H021-FYR8SS` <- sapply(data$`H021-FYR8SS`, function(x) paste(unique(unlist(str_split(x,", "))), collapse = "; "))

这段代码运行正常,但现在需要把这个逻辑应用到整个DataFrame的所有列。以下是输入和期望输出示例:

输入示例

data <- data.frame(
  `H021-2YTE1K` = c(" ", " ", " ", " ", " ", " ", " ", " ", "SNV"),
  `H021-4YZREF` = c("SNV, SNV, SNV", "SNV", "SNV", "SNV, SNV", "SNV", " ", " ", " ", " "),
  `H021-FYR8SS` = c(" ", " ", " ", " ", " ", "insertion", "deletion", "deletion, SNV, SNV, SNV", " "),
  row.names = c("RP1", "NCOA2", "RGS22", "CSMD3", "TNFRSF11B", "SEMA3A", "ENPP2", "IGLV3-1", "MTMR11"),
  stringsAsFactors = FALSE
)

期望输出示例

H021-2YTE1K H021-4YZREF     H021-FYR8SS
RP1                    " "        "SNV"             " "
NCOA2                  " "        "SNV"             " "
RGS22                  " "        "SNV"             " "
CSMD3                  " "        "SNV"             " "
TNFRSF11B              " "        "SNV"             " "
SEMA3A                 " "         " "      "insertion"
ENPP2                  " "         " "       "deletion"
IGLV3-1                " "         " " "deletion; SNV"
MTMR11               "SNV"         " "             " "

解决方案1:Base R 批量处理

用apply()遍历所有列,对每一列复用你已经写好的处理逻辑:

library(stringr)

# 对整个DataFrame应用去重逻辑
data_cleaned <- apply(data, 2, function(col) {
  sapply(col, function(x) {
    paste(unique(unlist(str_split(x, ", "))), collapse = "; ")
  })
})

# 转换回DataFrame并保留原行名
data_cleaned <- as.data.frame(data_cleaned, stringsAsFactors = FALSE)
row.names(data_cleaned) <- row.names(data)

解决方案2:tidyverse 简洁实现

如果习惯用dplyr,可以用mutate(across())批量处理所有列:

library(dplyr)
library(stringr)

data_cleaned <- data %>%
  mutate(across(everything(), ~ {
    paste(unique(unlist(str_split(.x, ", "))), collapse = "; ")
  }))

注意事项

如果你的DataFrame包含非字符类型的列,建议只处理字符型列,避免报错:

data_cleaned <- data %>%
  mutate(across(where(is.character), ~ {
    paste(unique(unlist(str_split(.x, ", "))), collapse = "; ")
  }))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:54:15