在R语言中按antibiotic_date合并antibiotic变量的方法咨询
按日期合并抗生素变量的R实现
你需要的是按id和antibiotic_date分组,将同一日期下的antibiotic值合并为空格分隔的字符串,以下是两种适合新手的实现方法:
示例数据构造
先还原你的原始数据:
df <- data.frame( id = c(1, 1, 1), antibiotic = c("a", "b", "c"), antibiotic_date = as.Date(c("2018-01-20", "2018-01-20", "2018-03-04")) )
方法一:使用dplyr包(tidyverse生态,新手友好)
dplyr的语法更直观,适合数据处理入门:
# 如果没装过dplyr,先安装:install.packages("dplyr") library(dplyr) # 分组合并 result_df <- df %>% group_by(id, antibiotic_date) %>% # 按id和日期分组 summarise(antibiotic = paste(antibiotic, collapse = " "), # 合并同组的抗生素值 .groups = "drop") # 取消分组状态 # 查看结果 print(result_df)
运行后会得到你想要的结果:
# A tibble: 2 × 3 id antibiotic_date antibiotic <dbl> <date> <chr> 1 1 2018-01-20 a b 2 1 2018-03-04 c
方法二:Base R原生方法(无需额外装包)
如果不想安装新包,用Base R的aggregate函数也能实现:
result_base <- aggregate( antibiotic ~ id + antibiotic_date, # 指定分组变量和待合并列 data = df, FUN = function(x) paste(x, collapse = " ") # 自定义合并逻辑 ) print(result_base)
注意事项
- 确保
antibiotic_date是日期类型(用as.Date()转换),避免因字符串格式不一致导致分组错误; - 如果你的实际数据有多个
id,两种方法都会自动按每个id单独分组处理。
内容的提问来源于stack exchange,提问作者zinc54574
相关产品推荐
相关产品推荐

