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

在R中按团队归属拆分CSV列并分类填充的技术问询

解决方案

先纠正个小笔误:你定义的teamb_b应该是team_b吧?下面代码里我会用正确的变量名。

直接上实操代码,一步步解决你的需求:

1. 读入数据并预处理

假设你的CSV文件叫data.csv,先读入数据,再把D列的分号分隔名字拆成列表格式(比separate更适合处理每行数量不定的元素):

library(dplyr)
library(stringr)

# 读入CSV数据
df <- read.csv("data.csv", stringsAsFactors = FALSE)

# 拆分D列的名字,得到每行对应一个名字向量的列表列
df <- df %>%
  mutate(names_list = str_split(D, ";\\s*"))  # 匹配分号+可选空格,避免拆分后名字带多余空格

2. 统一管理团队成员

把三个团队整合成一个列表,后续处理更简洁:

teams <- list(
  team_a = c('John', 'Tim'),
  team_b = c('David', 'Jack'),
  team_c = c('Sue', 'Frank', 'Jane')
)

3. 新增团队列并填充对应成员

用交集匹配提取每行属于对应团队的名字,再拼接成字符串:

df <- df %>%
  mutate(
    team_a = map_chr(names_list, ~str_c(intersect(.x, teams$team_a), collapse = "; ")),
    team_b = map_chr(names_list, ~str_c(intersect(.x, teams$team_b), collapse = "; ")),
    team_c = map_chr(names_list, ~str_c(intersect(.x, teams$team_c), collapse = "; "))
  )

解释:intersect用来筛选出每行名字中属于对应团队的成员,str_c把这些成员用分号拼接成字符串;如果没有匹配成员,对应列会显示空字符串。

4. 统计每行各团队人数

直接从拆分后的名字列表里统计对应团队的人数:

df <- df %>%
  mutate(
    count_team_a = map_int(names_list, ~sum(.x %in% teams$team_a)),
    count_team_b = map_int(names_list, ~sum(.x %in% teams$team_b)),
    count_team_c = map_int(names_list, ~sum(.x %in% teams$team_c))
  )

解释:%in%判断每个名字是否属于对应团队,sum统计符合条件的数量(TRUE会被识别为1,FALSE为0)。

示例效果

以你给出的几行数据为例:

  • 第1行D列John; Tim; David; Jack:team_a列显示John; Tim,count_team_a为2;team_b列显示David; Jack,count_team_b为2;team_c列空,count_team_c为0
  • 第2行D列Tim:team_a列显示Tim,count_team_a为1;其余团队列空,计数为0
  • 第3行D列Jack; David; Sue:team_b列显示Jack; David,count_team_b为2;team_c列显示Sue,count_team_c为1;team_a列空,计数为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:38:16