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版本一致
示例验证
假设你的原始数据是:
| ID | parity | quarter |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 2 | 2 |
| 2 | 1 | 1 |
| 2 | 1 | 2 |
运行代码后会得到:
| ID | parity | quarter | quarter_status |
|---|---|---|---|
| 1 | 1 | 1 | same |
| 1 | 1 | 1 | same |
| 1 | 2 | 2 | single |
| 2 | 1 | 1 | different |
| 2 | 1 | 2 | different |
完全符合你需要的三种情况标记。
内容的提问来源于stack exchange,提问作者Kat
相关产品推荐
相关产品推荐

