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

R语言数据框处理:根据同一ID下的不同code值生成type列

实现方案:为R语言数据框按id分组生成type列

没问题,这里有两种实用的实现方案,帮你快速生成符合规则的type列:

方法一:使用dplyr(tidyverse生态)

这是数据分析中最常用的分组处理方式,代码可读性高,逻辑清晰:

# 加载dplyr包(如果未安装先运行 install.packages("dplyr"))
library(dplyr)

# 定义原始数据框
DF <- data.frame(id=c(1,1,2,3,3),code=c("1","0","1","0","0"))

# 分组生成type列
DF <- DF %>%
  group_by(id) %>%  # 按id进行分组
  mutate(
    type = case_when(
      all(code == "1") ~ "A",       # 组内code全为1时标记A
      all(code == "0") ~ "B",       # 组内code全为0时标记B
      TRUE ~ "mix"                  # 其余情况(同时有1和0)标记mix
    )
  ) %>%
  ungroup()  # 取消分组,恢复普通数据框结构

# 查看结果
print(DF)

运行后会得到你期望的输出:

# A tibble: 5 × 3
     id code  type 
  <dbl> <chr> <chr>
1     1 1     mix  
2     1 0     mix  
3     2 1     A    
4     3 0     B    
5     3 0     B    

方法二:使用Base R(无需额外安装包)

如果你不想加载第三方包,用Base R也能轻松实现:

# 定义原始数据框
DF <- data.frame(id=c(1,1,2,3,3),code=c("1","0","1","0","0"))

# 1. 按id分组,获取每个组的code唯一值
group_unique_codes <- tapply(DF$code, DF$id, unique)

# 2. 根据每组的唯一值生成对应的type标记
type_mapping <- sapply(group_unique_codes, function(codes) {
  if (all(codes == "1")) "A"
  else if (all(codes == "0")) "B"
  else "mix"
})

# 3. 将type标记匹配到原数据框的每一行
DF$type <- type_mapping[as.character(DF$id)]

# 查看结果
print(DF)

补充说明

  • 你的code列是字符类型(存储为"1"/"0"),所以代码中用字符值进行判断。如果后续需要将code转为数值类型(1/0),只需把判断条件里的"1"/"0"改成1/0即可。
  • 两种方法都能完美匹配你要求的规则,可根据自己的代码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:22:41