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

使用R(或易用工具)重构视频序列观测数据的技术问询

高效处理R中视频观测序列的合并与去重

先模拟符合你场景的示例数据

假设你的数据包含video_id(视频唯一标识)、sequence_num(序列的顺序编号)、score(评分,含重复),先模拟一份同结构的数据方便演示:

set.seed(123)
df <- data.frame(
  video_id = rep(1:700, sample(2:4, 700, replace = TRUE)),
  sequence_num = unlist(lapply(sample(2:4, 700, replace = TRUE), function(x) 1:x)),
  score = rnorm(700*3, mean=5, sd=1),
  stringsAsFactors = FALSE
)
# 加入10%重复行模拟你的重复评分场景
dup_rows <- sample(nrow(df), round(nrow(df)*0.1))
df <- rbind(df, df[dup_rows, ])

1. 处理重复评分

根据你的重复数据类型选对应方案:

方案A:去除完全重复的行

如果重复的序列数据完全一致,直接去重:

df_unique <- unique(df)

方案B:对同一序列的重复评分取均值

如果重复是同一序列的两次不同评分,取均值保留唯一值:

library(dplyr)
df_unique <- df %>%
  group_by(video_id, sequence_num) %>%
  summarise(score = mean(score), .groups = "drop")

2. 将同一视频的序列合并为单行

推荐:用tidyverse的pivot_wider(代码直观易读)

先确保已安装tidyr包,用它把长格式数据转成宽格式,自动按序列顺序排列:

library(tidyr)
df_combined <- df_unique %>%
  pivot_wider(
    id_cols = video_id,
    names_from = sequence_num,
    names_prefix = "sequence_",
    values_from = score
  )

处理后每个video_id对应一行,sequence_1、sequence_2...分别对应该视频的第1、2...个序列评分,顺序由sequence_num严格保证。

基础R实现(无需额外包)

如果不想装包,用基础R的reshape函数:

# 先按视频ID和序列编号排序,保证合并顺序正确
df_unique_sorted <- df_unique[order(df_unique$video_id, df_unique$sequence_num), ]
# 转换为宽格式
df_combined <- reshape(
  df_unique_sorted,
  idvar = "video_id",
  timevar = "sequence_num",
  direction = "wide",
  sep = "_"
)

3. 验证结果

可以简单检查合并是否符合预期:

# 确认合并后是700条视频记录
nrow(df_combined) == 700

# 查看某条视频的合并结果
df_combined[df_combined$video_id == 1, ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:25:47