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

用dplyr按Video.ID汇总数据时,如何正确获取重复的Category值

在dplyr分组汇总中获取重复的单一分类值

你说得太对了——mean(Category)完全是错误的操作,不仅因为Category是字符型(mean根本不适用),更关键是每个Video.ID对应的Category本来就是重复的单一值,我们只需要提取这个固定值就行。这里有几个简单又高效的方法:

方法1:使用first()或last()提取组内首个/末尾值

因为每个分组里的Category值完全一致,直接取组内第一个或者最后一个元素就可以得到正确的分类:

small %>% 
  group_by(Video.ID) %>% 
  summarise(
    sumr = sum(Partner.Revenue), 
    len = first(Video.Duration..sec.), # 这里也可以用first代替mean,更高效
    cat = first(Category)
  )

同理,last(Category)也能得到一样的结果,选哪个全凭个人习惯。

方法2:用unique()提取唯一值

既然每个分组里的Category只有唯一的一个值(只是重复出现),unique()会直接返回这个唯一的字符串:

small %>% 
  group_by(Video.ID) %>% 
  summarise(
    sumr = sum(Partner.Revenue), 
    len = mean(Video.Duration..sec.), 
    cat = unique(Category)
  )

方法3:先提取元数据再合并(适合多固定属性场景)

如果你的数据里,Video.ID不仅对应固定的Category,还对应固定的Video.Duration..sec.,可以先把这些固定的元数据提取出来,再和统计结果合并,这样代码更清晰,也避免重复写提取逻辑:

# 提取每个Video.ID对应的固定属性
video_metadata <- small %>% 
  distinct(Video.ID, Category, Video.Duration..sec.)

# 计算需要汇总的统计量
video_summary <- small %>% 
  group_by(Video.ID) %>% 
  summarise(
    sumr = sum(Partner.Revenue),
    total_owned_views = sum(Owned.Views) # 可以按需添加更多统计项
  )

# 合并元数据和统计结果
left_join(video_summary, video_metadata, by = "Video.ID")

额外提一句:你的Video.Duration..sec.在每个分组里也是固定值,用first()代替mean()会更高效,毕竟没必要对完全相同的数值计算均值~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:16