R语言数据框两列逐行求交集返回character(0)问题求助
R语言DataFrame两列逐行求交集问题解决
问题根源在于你的fruits1和fruits2列存储的是单个字符串,而非字符向量。直接调用intersect时,会把每个单元格的整串当作单个元素处理,自然找不到交集。
解决方案
需要先将每个单元格的字符串按逗号分割为字符向量,去除元素前后空格后再求交集,最后可将结果合并为字符串(按需选择)。
修改后的完整代码
# 创建数据框 df <- data.frame( fruits1 = "apple, banana, orange", fruits2 = "avocado, raspberry, lemon, banana", stringsAsFactors = FALSE ) # 定义工具函数:处理字符串分割、去空格、求交集、结果合并 get_common_fruits <- function(str1, str2) { # 分割字符串为向量并去除每个元素的前后空格 vec1 <- trimws(strsplit(str1, ",")[[1]]) vec2 <- trimws(strsplit(str2, ",")[[1]]) # 计算交集 common <- intersect(vec1, vec2) # 将交集合并为单个字符串(若需保留向量格式,直接返回common即可) paste(common, collapse = ", ") } # 逐行应用函数生成结果列 df$common_fruits <- mapply(get_common_fruits, df$fruits1, df$fruits2) # 查看最终结果 print(df)
代码关键说明
stringsAsFactors = FALSE:确保字符串不会被自动转换为因子类型(R 4.0+版本默认已启用,但显式声明更稳妥)。trimws(strsplit(x, ",")[[1]]):解决原字符串中"逗号+空格"的分割问题,避免出现带空格的元素(如" banana")导致匹配失败。mapply:逐行对两列数据应用自定义函数,返回结果为字符串向量,直接赋值给新列即可。
运行后输出结果:
fruits1 fruits2 common_fruits 1 apple, banana, orange avocado, raspberry, lemon, banana banana
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

