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

在mutate中使用dplyr::count()统计因子报错求助

问题原因

dplyr::count()是针对数据框设计的函数,需要传入完整数据集。你在mutate里传入的AOI_new是单个因子向量(因为已经按AOI_new分组,每个分组内的AOI_new值完全相同),count()无法处理单个向量类型的输入,所以触发no applicable method错误。

而直接在group_by后调用count()时,你是把分组后的整个数据框传给了count(),它能正常识别并统计每组的行数,所以代码能运行。

另外要注意:你先用summarise聚合了数据,此时每个分组只剩1行,之后再用mutate计算注视次数已经失去了原始的行数信息,逻辑上也不成立。

解决方案

最简洁的方式是在第一次分组聚合时,同时用n()计算注视次数(n()会返回当前分组的行数,也就是该组的注视次数):

fix_df_summed <- fix_df_final %>% 
  group_by(participant, AOI_new, WHR, BMI) %>% 
  summarise(
    total_dwell_time = sum(dur),  # 计算总停留时间
    number_of_fixations = n()    # 计算注视次数
  )

如果你想分开计算再合并,也可以用以下方式:

# 先统计注视次数
fix_count <- fix_df_final %>% 
  group_by(participant, AOI_new, WHR, BMI) %>% 
  count(name = "number_of_fixations")

# 再计算总停留时间
fix_dwell <- fix_df_final %>% 
  group_by(participant, AOI_new, WHR, BMI) %>% 
  summarise(total_dwell_time = sum(dur))

# 合并两个结果
fix_df_summed <- dplyr::left_join(fix_dwell, fix_count, by = c("participant", "AOI_new", "WHR", "BMI"))

关键区别

  • count()是数据框级别的函数,需要接收完整数据集,用于快速分组计数;
  • n()是分组内的行数统计函数,在group_by后的summarise/mutate中使用,直接返回当前组的行数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:14