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

为什么dplyr的transmute函数无法计算两个月度生产力平均值?

问题修正说明

错误原因

  • 通过dplyr的summarize()返回的september_work和october_work是单列数据框(tibble),不是单个数值,直接进行算术运算会存在格式适配问题,需要先提取其中的数值内容。
  • transmute()函数的作用是基于原数据集的每行数据生成新列,你的需求是计算两个月总工作时长的单值平均值,不需要对原work数据集逐行操作,用法不符合场景。

修正后代码

基于原有逻辑修改版

# Loading Data:
work <- structure(list(Case_Number = 30:40, Year = c("2021", "2021", 
"2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021", 
"2021"), Month_Number = c("9", "9", "9", "9", "10", "10", "10", 
"10", "10", "10", "10"), Month_Name = c("September", "September", 
"September", "September", "October", "October", "October", "October", 
"October", "October", "October"), Day_Number = c(27L, 28L, 29L, 
30L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), Day_Name = c("Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "Monday", 
"Tuesday", "Wednesday", "Thursday"), Time_Wake = c(600L, 730L, 
650L, 830L, 630L, 630L, 830L, 722L, 641L, 800L, 720L), Start_Work = c(950L, 
1108L, 1430L, 955L, 1313L, 1125L, 1636L, 1126L, 1027L, 1323L, 
1003L), End_Work = c(1504L, 1430L, 1933L, 1335L, 1330L, 2130L, 
1636L, 1600L, 1730L, 1800L, 1739L), Mins_Sleep = c(310L, 390L, 
350L, 450L, 390L, 390L, 510L, 452L, 310L, 360L, 500L), Workout_Y_N = c("Y", 
"N", "N", "N", "N", "Y", "Y", "Y", "N", "Y", "Y"), Workout_Before_After = c("Before", 
NA, NA, NA, NA, "Before", "Before", "Before", NA, "Before", "Before"
), Time_Workout = c(730L, NA, NA, NA, NA, 915L, 1000L, 815L, 
NA, 900L, 740L), Work_Environment = c("Office", "Office", "Office", 
"Office", "Home", "Home", "Home", "Office", "Office", "Office", 
"Office"), Coffee_Cups = c(0L, 0L, 0L, 2L, 0L, 1L, 2L, 3L, 2L, 
2L, 4L), Tea_Cups = c(4L, 4L, 4L, 2L, 1L, 0L, 2L, 0L, 0L, 4L, 
2L), Mins_Work = c(266L, 196L, 198L, 220L, 17L, 382L, 0L, 180L, 
343L, 207L, 263L), Weather = c(NA, NA, "Sunny", "Sunny", NA, 
NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-11L))

# Calculate Productivity Growth:
library(dplyr)
september_work <- work %>% 
  filter(Month_Name=="September") %>% 
  summarize(September_Mins = sum(Mins_Work)) %>% 
  pull(September_Mins) # 提取数值,不再返回数据框

october_work <- work %>% 
  filter(Month_Name == "October") %>% 
  summarize(October_Mins = sum(Mins_Work, na.rm = T)) %>% 
  pull(October_Mins) # 提取数值

work_growth <- ((october_work - september_work) / september_work) # calc growth

# Create average of work between October and September:
avg_month_work <- (september_work + october_work)/2

更简洁的管道流实现(无需单独存储两个月份变量)

avg_month_work <- work %>%
  group_by(Month_Name) %>%
  summarise(total_mins = sum(Mins_Work, na.rm = T)) %>%
  filter(Month_Name %in% c("September", "October")) %>%
  summarise(avg_month_work = mean(total_mins)) %>%
  pull(avg_month_work)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:07