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

按列分组并根据条件生成新变量的R语言数据处理问题

问题描述

现有如下DataFrame:

Column AColumn B
id1blue
id1red
id1grey
id2red
id3red
id3grey

期望输出:

Column AColumn B
id1all.mixed
id2red
id3red.grey

尝试过以下代码:

table1 <- mydf %>% group_by(ColA, ColB) %>% count(ColB)

得到结果:

ColA ColB                n
  <chr>   <chr>           <int>
1 id1    blue              1
2 id1    red               1
3 id1    grey              1
4 id2    red               1
5 id3    red               1
6 id3    grey              1

后续卡壳,尤其不知道如何处理同一Column A对应重复Column B值的情况(比如id5对应两个grey)。

解决方案

核心逻辑是先按Column A分组,提取每组唯一的Column B值,再根据唯一值的数量和内容生成目标结果:

library(dplyr)

result_df <- mydf %>%
  # 按Column A分组
  group_by(`Column A`) %>%
  # 提取每组唯一的Column B值,存入列表列
  summarise(unique_vals = list(unique(`Column B`)), .groups = "drop") %>%
  # 根据唯一值的情况生成对应输出
  mutate(`Column B` = case_when(
    # 包含三种颜色时输出all.mixed
    setequal(unique_vals[[1]], c("blue", "red", "grey")) ~ "all.mixed",
    # 只有一种唯一值时直接输出该值
    length(unique_vals[[1]]) == 1 ~ unique_vals[[1]],
    # 其他情况(两种组合)按排序后用.连接
    TRUE ~ paste(sort(unique_vals[[1]]), collapse = ".")
  )) %>%
  # 移除中间辅助列
  select(-unique_vals)

测试重复值场景

如果输入包含:

Column AColumn B
id5grey
id5grey

运行代码后,id5对应的Column B会输出grey,因为unique()会自动去重,最终唯一值仅为一个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:05:21