如何在R中将单测量数据框合并至多测量数据框并按时间排序
合并血压测量数据框并按时间排序
现有两个R语言数据框:
df1:存储每个ID在多个时间点的BP1、BP2重复测量数据df2:存储每个ID的BP1、BP2单次测量数据
需将二者合并,并按ID分组后对Time变量升序排列,得到目标数据框。
数据定义
# 构建df1 ID <- c(1,1,1,2,2,2,3,3,4) Time <- c(56,57,58,61,62,64,66,67,72) BP1 <- c(70,73,73,74,75,76,74,74,70) BP2 <- c(122,122,123,126,124,121,130,132,140) df1 <- data.frame(ID, Time, BP1, BP2) # 构建df2 ID <- c(1,2,3,4) Time <- c(55, 60, 65, 70) BP1 <- c(70, 72, 73, 74) BP2 <- c(120, 124, 130, 134) df2 <- data.frame(ID, Time, BP1, BP2)
解决方法
方法1:基础R实现
先合并两个数据框,再按ID和Time排序:
# 合并两个数据框 combined_df <- rbind(df1, df2) # 按ID分组,对Time升序排列 sorted_df <- combined_df[order(combined_df$ID, combined_df$Time), ] # 重置行名(可选操作) rownames(sorted_df) <- NULL
方法2:tidyverse(dplyr)实现
用bind_rows合并数据,arrange完成排序,代码更简洁直观:
library(dplyr) sorted_df <- bind_rows(df1, df2) %>% arrange(ID, Time)
最终结果示例
运行上述代码后,排序后的数据框前几行如下:
> head(sorted_df) ID Time BP1 BP2 1 1 55 70 120 2 1 56 70 122 3 1 57 73 122 4 1 58 73 123 5 2 60 72 124 6 2 61 74 126
内容的提问来源于stack exchange,提问作者19056530
相关产品推荐
相关产品推荐

