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

如何按时间戳对不等长R时序数据框的value1列求和?

问题解决:按时间戳匹配相加列值

错误原因

你直接用df1$value1 + df2$value1会报错,核心问题是两个数据框行数不同(df1有8行,df2有5行),且这种写法是按行号硬相加,根本没按时间戳匹配。R发现短向量无法整数倍循环匹配长向量时,判定这是操作失误,所以抛出longer object length is not a multiple of shorter object length错误。

正确解决方案

必须先按timeStamp将两个数据框匹配合并,再计算对应值的和,同时处理未匹配到的情况。

方法1:使用dplyr包(推荐,代码更简洁)

library(dplyr)

df_new <- df1 %>%
  # 按timeStamp左连接,保留df1所有行,匹配df2的对应时间戳行
  left_join(df2, by = "timeStamp", suffix = c("_df1", "_df2")) %>%
  # 计算total:匹配到则相加,未匹配到用0替代df2的空值
  mutate(total = value1_df1 + coalesce(value1_df2, 0)) %>%
  # 保留原df1结构,仅新增total列
  select(timeStamp, value1 = value1_df1, total)

方法2:使用base R(无需额外安装包)

# 按timeStamp合并,保留df1所有行
df_merged <- merge(df1, df2, by = "timeStamp", all.x = TRUE)
# 将df2中未匹配到的空值替换为0
df_merged$value1.y[is.na(df_merged$value1.y)] <- 0
# 计算总和
df_merged$total <- df_merged$value1.x + df_merged$value1.y
# 调整列名和结构,还原df1初始样式
df_new <- df_merged[, c("timeStamp", "value1.x", "total")]
names(df_new)[2] <- "value1"

两种方法最终生成的df_new都能满足需求:

  • 两个数据框共有的时间戳,total为对应value1的和
  • 仅df1存在的时间戳,total直接取df1的value1值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:35:18