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

R语言管道符中mutate结合==比较字符串报错求助

解决R语言中逐字符比较字符串并生成布尔向量的问题

错误原因

你用str_split拆分字符串后得到的是列表列(每个单元格存储一个字符向量),直接用==比较两个列表列时,R无法处理这种类型的比较,因此报错。

解决方案

需要用purrr::map2函数,对每行的两个拆分后的字符向量进行逐元素比较,再转换为数字格式。以下是修正后的代码:

# 加载所需包
library(tidyverse)
library(readxl)

# 读取Excel文件
Score <- read_excel(Score_Path_LINUX)

# 处理数据生成目标列
Bool <- Score %>% 
  mutate(KEY_split = str_split(KEY, ""),
         Tim_split = str_split(Tim_Ans, ""),
         # 使用map2逐行比较两个拆分后的向量,转成数字
         Tim_Bool = map2(KEY_split, Tim_split, ~ as.numeric(.x == .y))) %>% 
  view()

测试验证

如果用你给出的测试数据:

test_data <- tibble(KEY = "BBSS", Tim_Ans = "BBBB")

test_result <- test_data %>% 
  mutate(KEY_split = str_split(KEY, ""),
         Tim_split = str_split(Tim_Ans, ""),
         Tim_Bool = map2(KEY_split, Tim_split, ~ as.numeric(.x == .y)))

test_result$Tim_Bool会得到[[1]] [1] 1 1 0 0,完全符合你的期望输出。

补充说明

  • map2(.x, .y, .f)会遍历.x和.y的每一对元素,对它们应用函数.f;这里.x对应KEY_split的每个列表元素,.y对应Tim_split的每个列表元素。
  • 如果需要把Tim_Bool的列表列展开成多个独立列(每个字符对应一列),可以追加unnest_wider操作:
Bool <- Score %>% 
  mutate(KEY_split = str_split(KEY, ""),
         Tim_split = str_split(Tim_Ans, ""),
         Tim_Bool = map2(KEY_split, Tim_split, ~ as.numeric(.x == .y))) %>% 
  unnest_wider(Tim_Bool, names_sep = "_") %>% 
  view()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:17:07