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

R语言使用dplyr按ID分组基于日期生成Drug字段序列的实现方法

需求实现方案

针对按ID分组、按日期升序拼接药物序列的需求,可通过以下两种方案实现:


示例数据构造

先运行给定代码生成测试数据框:

df <- data.frame(ID = c(1,1,2,3,4,5,5,6,7,8),
                 dat = seq(as.Date("2021-01-01"), as.Date("2021-03-05"), by="weeks"),
                 drug = c("A","A","B","C","B","B","C","D","C","B"))

方案1:dplyr包实现(语法更简洁)

适合习惯tidyverse生态的用户:

# 未安装dplyr先运行 install.packages("dplyr")
library(dplyr)

res <- df %>%
  # 先按ID、日期升序排序,保证组内药物顺序符合要求
  arrange(ID, dat) %>%
  # 按ID分组
  group_by(ID) %>%
  # 拼接drug字段,用逗号作为分隔符
  summarise(seq1 = paste(drug, collapse = ",")) %>%
  ungroup()

运行后直接打印res即可得到预期输出结果。


方案2:base R实现(无需额外安装包)

不想加载第三方包可直接用原生R函数实现:

# 先对数据按ID、日期升序排序
df_sorted <- df[order(df$ID, df$dat), ]
# 按ID分组拼接drug字段
res <- aggregate(drug ~ ID, data = df_sorted, FUN = function(x) paste(x, collapse = ","))
# 修改第二列列名匹配预期
colnames(res)[2] <- "seq1"

注意:必须先按日期排序再执行分组拼接操作,若原始数据中同一ID的行顺序打乱,直接拼接会导致生成的序列顺序错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:54:05