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

如何在遍历多个数据框的for循环中使用dplyr的mutate()函数

核心错误原因

你调整后代码运行失败的核心原因是:你新增time_seconds_wholemeasurement字段的操作是赋值给了临时变量datafile_wholemeasurement,但后续筛选、新增测试时段字段时,仍然调用的是原始列表里的file_contents[[i]],这个原始数据框没有你刚新增的时间字段,自然会报对象找不到的错误。

修正后的可运行代码
library(dplyr)

# 基础数据构造(和原有逻辑一致)
d1 <- data.frame(P=c(1,5,2,3,4,7,5,6,7), E=c(4,5,6,4,5,6,4,5,6))
d2 <- data.frame(P=c(0,9,8,5,4,7,5), E=c(6,5,4,6,5,4,5))
d3 <- data.frame(P=c(6,5,4,6,5,4,6,5,4), E=c(3,2,1,5,5,5,5,5,5))
d4 <- data.frame(P=c(5,9,9,5,2,2,1,8,5,7,6,5),E=c(8,8,8,8,8,8,8,8,8,8,8,8))

file_contents <- list(d1, d2, d3, d4)
# 存储起止索引的结果表
res <- data.frame(teststart = rep(NA,length(file_contents)), testend =rep(NA,length(file_contents)))
# 新增:存储每个数据框处理后的全量数据、测试时段数据,方便后续分析调用
processed_list <- vector("list", length(file_contents))

for(i in 1:length(file_contents))
{
  # 先给当前数据框新增全量测量时间列,后续所有操作都用这个已新增字段的df
  datafile_wholemeasurement <- file_contents[[i]] %>%
    mutate(time_seconds_wholemeasurement = seq(from = 30, to = nrow(.)*30, by = 30)) # 用nrow(.)指代当前df,写法更通用
  
  # 定位起止位置
  teststart <- which(datafile_wholemeasurement$P == 5)[1]  
  testend <- which(datafile_wholemeasurement$P == 5)[2]    
  
  # 筛选测试时段数据 + 新增测试时段时间列,直接用已加全量时间字段的datafile_wholemeasurement处理
  datafile_testduration <- datafile_wholemeasurement %>% 
    filter(between(row_number(), teststart, testend-1)) %>%
    mutate(time_seconds_testduration = time_seconds_wholemeasurement - first(time_seconds_wholemeasurement)) 
  
  # 结果写入
  res$teststart[[i]] <- teststart
  res$testend[[i]] <- testend
  processed_list[[i]] <- list(
    whole_measurement = datafile_wholemeasurement,
    test_duration = datafile_testduration
  )
}
结果调用说明

运行完成后:

  • 你可以通过res查看所有数据框的测试起止索引
  • 可以通过processed_list[[序号]]$test_duration查看对应序号数据框的测试时段处理结果,已经包含你需要的所有新增字段
  • 如果你不需要保留全量测量数据,也可以调整processed_list的存储逻辑,只保留测试时段数据即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:54:02