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

R语言:基于奶牛ID、parity及quarter创建新column技术求助

解决奶牛乳房象限分组标记问题

看起来你需要根据**同一奶牛ID和胎次(parity)**分组,判断组内的乳房象限(quarter)是唯一出现、全部相同还是存在差异,然后生成对应的新列。下面我用两种常用的数据处理工具给出具体实现方案:


方案1:使用R的dplyr包

假设你的数据框名为cow_data,包含ID、parity、quarter三列:

library(dplyr)

cow_data <- cow_data %>%
  group_by(ID, parity) %>%
  mutate(
    quarter_status = case_when(
      n() == 1 ~ "single",  # 组内仅一条记录
      n_distinct(quarter) == 1 ~ "same",  # 组内所有quarter相同
      TRUE ~ "different"  # 组内quarter存在不同值
    )
  ) %>%
  ungroup()

代码解释:

  • group_by(ID, parity):按奶牛ID和胎次分组,确保我们只在同一ID+胎次的范围内判断
  • n():获取当前组的行数,判断是否是单条记录
  • n_distinct(quarter):统计组内不同quarter的数量,1代表全部相同,大于1代表存在差异
  • case_when():根据条件匹配对应的标记文本

方案2:使用Python的pandas库

如果用Python处理,假设你的数据框是cow_df:

import pandas as pd

# 定义分组判断函数
def get_quarter_status(group):
    if len(group) == 1:
        return "single"
    elif group["quarter"].nunique() == 1:
        return "same"
    else:
        return "different"

# 分组并应用函数,生成新列
cow_df["quarter_status"] = cow_df.groupby(["ID", "parity"])["quarter"].transform(get_quarter_status)

代码解释:

  • groupby(["ID", "parity"]):同样按ID和胎次分组
  • transform():将判断函数的结果映射回原数据框的每一行,保证组内所有行得到相同的标记
  • nunique():统计组内quarter的唯一值数量,逻辑和R版本一致

示例验证

假设你的原始数据是:

IDparityquarter
111
111
122
211
212

运行代码后会得到:

IDparityquarterquarter_status
111same
111same
122single
211different
212different

完全符合你需要的三种情况标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:38:05