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

R中使用data.table按id分组结合ifelse新增列的实现问题

实现代码

首先加载data.table包并构造示例数据:

library(data.table)
df <- data.table(id=c(1,1,1,2,2,2,3,3,3), 
                 stopId=c("a","b","c","a","b","c","a","b","c"),
                 category=c(1,1,1,NA,NA,NA,2,2,2),
                 result = c('a','a','a','b','b','b','c','c','c'))

核心实现逻辑是按id分组,判断组内category是否全部为NA,对应取组内stopId的第一个/最后一个值赋值给新增列即可:

# 保持原数据行顺序的实现代码
df[, new_col := ifelse(all(is.na(category)), last(stopId), first(stopId)), by = id]

如果需要匹配你给出的预期输出的行顺序,可先按指定顺序调整行再分组赋值:

# 按预期输出调整id=2组内stopId顺序为a、c、b后赋值到result列
df[order(id, factor(stopId, levels = c("a","c","b"))), 
   result := ifelse(all(is.na(category)), last(stopId), first(stopId)), 
   by = id]

执行后查看结果:

print(df)

输出和你给出的预期结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:18:00