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

如何在输出CSV中添加取值自文件夹名的City_Name列?

解决方法

你可以通过以下步骤为输出CSV添加City_Name列:

  1. 提取当前文件夹的城市名称:用basename()函数从文件夹路径中提取纯城市名称(比如从完整路径里拿到NYR或KAN),避免直接用完整路径作为城市名。
  2. 在汇总后添加城市列:在dplyr的链式操作里,用mutate()新增一列,每行填充提取到的城市名称。

修改后的完整代码如下:

for (idx in seq_along(dirlist)){
  # 提取当前城市名称(从文件夹路径中获取纯名称)
  city_name <- basename(dirlist[idx])
  
  filelist <- list.files(path = dirlist[idx], full.names = TRUE, recursive = TRUE, pattern = ".txt$")
  dt_ <- read_the_files(filelist)
  dt.tidied <- adj_col_names(dt_)

  # 合并数据
  merged <- rbindlist(dt.tidied, fill = TRUE, use.names = TRUE)
 
  # 选择输出列
  selected_column <- c('YYmmdd', 'Temp', 'Pres')

  # 计算日均值并添加城市列
  avg_dl <- merged %>%    
    select(all_of(selected_column)) %>%  # 先筛选需要的列,避免处理无关数据
    group_by(YY_mm_dd = lubridate::floor_date(`YYmmdd`, "1 day")) %>% 
    summarise(across(where(is.numeric), ~ if(sum(is.na(.x)) > 5) NA else mean(.x, na.rm = TRUE))) %>%
    mutate(City_Name = city_name) %>%  # 新增城市列,每行填充当前城市名
    write.csv(paste0(dirlist[idx],"_dl.csv"), row.names = FALSE)  # 建议加上row.names=FALSE避免输出行号
}

为什么之前用cbind可能失败?

如果是在group_by之前用cbind(merged, City_Name = city_name),虽然能给原始数据加列,但后续group_by + summarise会把非分组列、非汇总列丢弃,导致最终输出里没有City_Name。而在summarise之后用mutate,是直接给汇总后的日均值数据加固定值列,不会被丢弃。

内容的提问来源于stack exchange,提问作者Alexia k Boston

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:48