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

如何提取R数据框字符串列中相同位置的重复字符?

在R中提取数据框列内字符串相同位置的重复字符

给定如下R数据框,需要提取每列所有字符串在相同位置上完全一致的字符,拼接成结果字符串,最终得到与示例中result一致的输出:

df <- data.frame(col1 = paste0("a", LETTERS[1:5]),
                 col2 = paste0("b", letters[1:5]),
                 col3 = paste0("ccde", letters[1:5]),
                 col4 = paste0('?', letters[1:2], 1:5),
                 col5 = paste0(1:5, 'hello you', letters[1:2], 1:5),
                 col6 = paste0('hello', letters[1:2], 1:5, "you"),
                 col7 = c("hello1 you", "hello you2", "hello3 you", "hello you4", "hello5 you"))

实现方案

核心思路是将每列的字符串拆分为单个字符,逐位置检查所有行的字符是否一致,保留一致的字符并拼接:

# 定义处理单列的函数
extract_common_chars <- function(col) {
  # 将列中每个字符串拆分为字符向量(先转字符避免因子类型问题)
  char_list <- strsplit(as.character(col), "")
  # 转换为矩阵:每行对应一个字符串的字符,每列对应所有字符串的同位置字符
  char_matrix <- do.call(rbind, char_list)
  # 标记所有行字符一致的位置
  common_pos <- apply(char_matrix, 2, function(x) length(unique(x)) == 1)
  # 提取并拼接一致位置的字符
  paste(char_matrix[1, common_pos], collapse = "")
}

# 应用函数到数据框所有列
result <- sapply(df, extract_common_chars)
result

输出结果

运行上述代码后,得到的结果与需求完全匹配:

col1       col2       col3       col4       col5       col6       col7 
      "a"        "b"     "ccde"        "?" "hello you"  "helloyou"     "hello" 

代码解释

  1. 字符串拆分:strsplit(as.character(col), "")将列中每个字符串拆分为单个字符的列表,同时把列转为字符类型(避免数据框默认的因子类型干扰)。
  2. 矩阵转换:do.call(rbind, char_list)把字符列表转为矩阵,方便按位置(列)统一检查所有行的字符。
  3. 位置检查:apply(char_matrix, 2, ...)遍历矩阵的每一列(对应原字符串的每个位置),通过length(unique(x)) == 1判断该位置的字符是否在所有行中完全一致。
  4. 字符拼接:提取第一行中所有一致位置的字符(所有行该位置字符相同,取任意一行均可),用paste(..., collapse = "")拼接成最终字符串。

内容的提问来源于stack exchange,提问作者Maël

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:05:21