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

基于Department列数据重新计算人员工时列值:R语言lapply函数使用问题求助

问题排查与解决方案

我来帮你搞定这个问题,先拆解下你代码里的错误,再给出符合需求的实现方案~

你的代码存在的问题

  • 列索引错误:你写的mydata4[3:15]选中了过多列,原始数据里name1到name7对应的是第3到第9列(前两列是Date和department),这个范围明显超出了目标列。
  • 计算逻辑完全偏离需求:x + x[1]/13这部分有两个核心问题:
    • x[1]取的是当前列的第一行值,而不是对应行的department数值,无法实现每行单独分配的逻辑;
    • 除以13和需求里“平均分给7位人员”的要求不符,应该是除以7。

正确的实现方案

方法1:用dplyr包(简洁易读,推荐)

如果习惯用tidyverse风格的代码,用mutate()配合across()可以轻松实现:

library(dplyr)

# 生成处理后的数据集:给每个name列加上对应行department/7的值,同时移除原department列
processed_data <- mydata4 %>%
  mutate(across(starts_with("name"), ~ .x + department / 7)) %>%
  select(-department)
  • starts_with("name")会自动选中所有以name开头的列(也就是name1到name7);
  • ~ .x + department / 7表示对每个选中的列,把该列的值加上当前行的department除以7的结果;
  • select(-department)是可选操作,用来移除不再需要的原department列。

方法2:Base R实现(无需额外安装包)

如果不想用第三方包,用基础R代码也能实现:

# 确定name列的位置:第3到第9列
name_col_indices <- 3:9
# 计算每行需要分配给每个人员的数值
per_person_allocation <- mydata4$department / 7
# 给每个name列加上对应分配值
mydata4[name_col_indices] <- mydata4[name_col_indices] + per_person_allocation
# 移除原department列(可选)
processed_data <- mydata4[, -2]

验证效果

以2022/05行为例,department=117.89,每人分配的数值是117.89/7≈16.84,所以name1的新值就是85.37+16.84≈102.21,完全符合你期望的输出逻辑。

内容的提问来源于stack exchange,提问作者Диана

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:28:12