如何在R中按姓名计算并添加总工时列
在R中按姓名汇总总工时(类似Excel SUMPRODUCT)
嘿,这个需求在R里其实有两种很实用的实现方式,都能帮你给每行新增对应姓名的总工时列,效果和你说的Excel SUMPRODUCT完全一致。
第一步:先构造你的示例数据
首先我们把你给出的示例转换成R可处理的数据框(注意John Smith是完整姓名,要作为单独一列):
# 创建示例数据框 df <- data.frame( Name = c("John Smith", "John Smith", "Hailey", "Hailey"), Hours = c(8, 8, 9, 10), stringsAsFactors = FALSE )
方法一:用dplyr包(直观易读,适合复杂操作)
如果你习惯用tidyverse系列工具,dplyr的分组+突变操作逻辑非常清晰:
# 先加载dplyr包(没安装的话先运行install.packages("dplyr")) library(dplyr) # 按姓名分组,新增总工时列 df <- df %>% group_by(Name) %>% mutate(Total_Hours = sum(Hours)) %>% ungroup()
运行后你的数据框会新增Total_Hours列,每个John Smith的行对应16,Hailey的行对应19。
方法二:用base R的ave函数(无需额外安装包)
如果你不想加载第三方包,base R自带的ave函数可以直接搞定:
# 直接新增总工时列 df$Total_Hours <- ave(df$Hours, df$Name, FUN = sum)
ave函数会自动按Name分组,对每组的Hours求和,返回和原数据长度一致的结果,完美匹配每行对应的姓名。
运行任意一种方法后,你的数据框都会变成这样:
Name Hours Total_Hours 1 John Smith 8 16 2 John Smith 8 16 3 Hailey 9 19 4 Hailey 10 19
内容的提问来源于stack exchange,提问作者Gulshan Chahal
相关产品推荐
相关产品推荐

