在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
相关产品推荐
相关产品推荐

