如何在R中基于时间戳按列合并含同名列的两个DataFrame
嗨,这个需求其实很容易实现,我给你分享两种常用的方法,都能完美得到你想要的结果:
方法一:使用dplyr包(推荐,代码更简洁直观)
首先我们先把你给出的示例数据构造出来,方便测试:
# 加载dplyr包 library(dplyr) # 构造DENVER数据框 DENVER <- data.frame( Timestamp = c("01/01/2021 00:00", "01/01/2021 01:00", "01/01/2021 02:00"), Heating_energy = c(2,5,5), Lighting_Energy = c(6,5,1), Total_Energy = c(8,10,6), stringsAsFactors = FALSE ) # 构造CHICAGO数据框 CHICAGO <- data.frame( Timestamp = c("01/01/2021 00:00", "01/01/2021 01:00", "01/01/2021 02:00"), Heating_energy = c(1,6,2), Lighting_Energy = c(1,1,6), Total_Energy = c(2,7,8), stringsAsFactors = FALSE )
接下来我们先合并两个数据框,再给非Timestamp的列加上城市后缀:
# 合并数据并添加城市标识 merged_df <- DENVER %>% inner_join(CHICAGO, by = "Timestamp", suffix = c("_DENVER", "_CHICAGO")) # 查看结果 print(merged_df)
这里的suffix参数会自动给来自两个数据框的同名列(除了用于关联的Timestamp)加上指定的后缀,正好符合你的需求!
方法二:使用Base R(无需额外加载包)
如果你不想加载第三方包,用Base R的merge函数也能实现:
# 合并数据框 merged_df_base <- merge(DENVER, CHICAGO, by = "Timestamp") # 重命名列,添加城市标识 colnames(merged_df_base) <- c( "Timestamp", "Heating_energy_DENVER", "Lighting_Energy_DENVER", "Total_Energy_DENVER", "Heating_energy_CHICAGO", "Lighting_Energy_CHICAGO", "Total_Energy_CHICAGO" ) # 查看结果 print(merged_df_base)
这种方法需要手动指定所有新列名,适合列数不多的情况。
两种方法运行后都会得到你想要的输出格式:
Timestamp Heating_energy_DENVER Lighting_Energy_DENVER Total_Energy_DENVER Heating_energy_CHICAGO Lighting_Energy_CHICAGO Total_Energy_CHICAGO
1 01/01/2021 00:00 2 6 8 1 1 2
2 01/01/2021 01:00 5 5 10 6 1 7
3 01/01/2021 02:00 5 1 6 2 6 8
内容的提问来源于stack exchange,提问作者prp

