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

使用tidyverse转换行列时保留有效重复数据的方法求助

解决方法

你当前的代码存在两个核心问题:

  • rownames_to_column()用法错误,这个函数的作用是给数据框添加一列存储原行名,而非将Agent设为行名;
  • R的行名必须唯一,直接把重复的Agent设为行名本身就不成立,这也是你触发报错的原因。

根据你“每个Agent仅显示一行、保留所有关联Job”的需求,这里提供两种实用方案:

方案1:将同一Agent的Job合并为单个字符串列

适合需要把所有关联Job集中在同一单元格展示的场景:

library(tidyverse)

# 先清理数据:去除Agent字段的首尾空格(比如原数据里的"Agent C ")
sample.df <- data.frame(
  Agent = c("Agent A", "Agent B", "Agent A", "Agent C ", "Agent B"),
  Job = c(1,1,2,2,3)
) %>% 
  mutate(Agent = str_trim(Agent))

# 分组合并Job
sample.df %>%
  group_by(Agent) %>%
  summarize(Assigned_Jobs = str_c("Job ", Job, collapse = ", "), .groups = "drop")

运行后输出结果:

# A tibble: 3 × 2
  Agent   Assigned_Jobs
  <chr>   <chr>        
1 Agent A Job 1, Job 2 
2 Agent B Job 1, Job 3 
3 Agent C Job 2        

方案2:转换为宽格式(每个Job作为单独列)

如果需要用独立列区分不同Job,可以用pivot_wider,通过list保留每个Agent的所有关联Job,或给重复列加后缀:

# 用list格式保留每个Agent的所有Job
sample.df %>%
  mutate(Job = str_c("Job ", Job)) %>%
  pivot_wider(names_from = Job, values_from = Job, values_fn = list, values_fill = NA)

# 或给重复关联的Job列加序号后缀
sample.df %>%
  mutate(Job = str_c("Job ", Job),
         row_id = row_number(), .by = Agent) %>% # 按Agent生成组内行号
  pivot_wider(names_from = c(Job, row_id), values_from = Job, values_fill = NA)

内容的提问来源于stack exchange,提问作者Jérôme Fortier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:42:45