如何在R的dataframe中为同组行分配指定值,新增CodeGrp列?
为DataFrame新增CodeGrp列的实现方法
数据准备
首先构建示例数据框:
myData <- data.frame( Name = c("R","R","T","R","N","N","T"), Group = c(0,0,0,0,1,1,0), Code = c(0,2,2,0,3,0,4) )
数据预览:
> myData Name Group Code 1 R 0 0 2 R 0 2 3 T 0 2 4 R 0 0 5 N 1 3 6 N 1 0 7 T 0 4
需求说明
需要新增一列CodeGrp,规则如下:
- 若该行
Group值为0,直接复制该行的Code值; - 若该行
Group值大于0,将该Group组内的最大Code值分配给组内所有行。
期望结果:
Name Group Code CodeGrp Explain 1 R 0 0 0 Copy over Code since Group = 0 2 R 0 2 2 Copy over Code since Group = 0 3 T 0 2 2 Copy over Code since Group = 0 4 R 0 0 0 Copy over Code since Group = 0 5 N 1 3 3 Group is > 0 so insert in CodeGrp column the max Code in this Group 6 N 1 0 3 Group is > 0 so insert in CodeGrp column the max Code in this Group 7 T 0 4 4 Copy over Code since Group = 0
实现方法
方法一:base R实现
使用ave()函数按组计算最大值,结合ifelse()完成条件判断:
myData$CodeGrp <- with(myData, ifelse(Group == 0, Code, ave(Code, Group, FUN = max)))
方法二:dplyr实现
通过分组操作和mutate()函数实现:
library(dplyr) myData <- myData %>% group_by(Group) %>% mutate(CodeGrp = ifelse(Group == 0, Code, max(Code))) %>% ungroup()
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

