R语言对excel中多个sheet子表批量进行地理探测器计算

## ================= 基本设置 =================
## 1) 设定你的工作目录(保持你的原路径不变)
setwd("D:/*****/*****/******")## 2) 文件名(与xlsx实际名字保持一致)
xlsx_file <- "驱动因素(中低收入).xlsx"## ================= 依赖包 =================
need_pkgs <- c("readxl", "GD")
to_install <- need_pkgs[!need_pkgs %in% installed.packages()[, "Package"]]
if (length(to_install) > 0) install.packages(to_install)
library(readxl)
library(GD)## ================= 配置参数 =================
discmethod <- c("equal","natural","quantile","geometric","sd")  # 离散化方法
discitv    <- 3:6                                             # 分成5~10类
x_vars     <- paste0("X", 1:18)                                # X1~X18
y_var      <- "Y"## 你给的7个子表名(与excel中的工作表名保持一致)
target_sheets <- c("1","2","3","4","5","6","7")## ================= 辅助函数 =================
sanitize_filename <- function(x) {# 用于把工作表名安全地转为文件名x <- gsub("[\\\\/:*?\"<>|]", "_", x)x <- gsub("\\s+", "_", x)enc2utf8(x)
}coerce_numeric <- function(df, cols) {# 强制把指定列转为数值(如果有字符/因子)for (cc in cols) {if (cc %in% names(df)) {# 保留纯数字或可转的,其他变 NAdf[[cc]] <- suppressWarnings(as.numeric(df[[cc]]))}}df
}## ================= 主流程:逐表批量运算 =================
# 读取excel文件的所有表名,校验是否包含目标表
all_sheets <- readxl::excel_sheets(xlsx_file)
missing_sheets <- setdiff(target_sheets, all_sheets)
if (length(missing_sheets) > 0) {warning(sprintf("以下工作表在 %s 中未找到:%s",xlsx_file, paste(missing_sheets, collapse = ", ")))
}
sheets_to_run <- intersect(target_sheets, all_sheets)if (length(sheets_to_run) == 0) {stop("未找到可运行的工作表,请检查 xlsx 文件及表名。")
}for (sh in sheets_to_run) {cat(sprintf(">>> 正在处理工作表:%s ...\n", sh))# 读取当前工作表df <- readxl::read_excel(path = xlsx_file, sheet = sh)df <- as.data.frame(df, stringsAsFactors = FALSE)# 检查必要列need_cols <- c(y_var, x_vars)lost_cols <- setdiff(need_cols, names(df))if (length(lost_cols) > 0) {warning(sprintf("工作表 %s 缺少列:%s,跳过该表。", sh, paste(lost_cols, collapse = ", ")))next}# 类型转换:确保 Y 与 X1~X18 为数值df <- coerce_numeric(df, need_cols)# 去除在 Y 或任一 X 上有缺失的行keep <- complete.cases(df[, need_cols])na_drop_n <- sum(!keep)if (na_drop_n > 0) {message(sprintf("工作表 %s:剔除含缺失的行 %d 行。", sh, na_drop_n))}df_clean <- df[keep, , drop = FALSE]# 构建公式fm <- as.formula(paste0(y_var, " ~ ", paste(x_vars, collapse = " + ")))# 运行地理探测器 gdmdatagdm <- GD::gdm(formula = fm,continuous_variable = x_vars,   # 都是连续变量data = df_clean,discmethod = discmethod,discitv = discitv)# 将结果保存到 txtout_name <- paste0("GDM结果_", sanitize_filename(sh), ".txt")out_path <- file.path(getwd(), out_name)res_txt <- capture.output({cat("文件:", xlsx_file, "\n", sep = "")cat("工作表:", sh, "\n", sep = "")cat("公式:", deparse(fm), "\n", sep = "")cat("离散化方法:", paste(discmethod, collapse = ", "), "\n", sep = "")cat("分组数:", paste(discitv, collapse = ", "), "\n\n", sep = "")print(datagdm)})writeLines(res_txt, out_path, useBytes = TRUE)cat(sprintf("保存结果:%s\n", out_path))## 可选:如需同时保存每个表的图,取消以下注释# png_name <- paste0("GDM图_", sanitize_filename(sh), ".png")# png(file.path(getwd(), png_name), width = 1000, height = 800, res = 120)#   plot(datagdm)# dev.off()# cat(sprintf("保存图形:%s\n", file.path(getwd(), png_name)))
}cat("=== 全部完成 ===\n")

假设excel文件中有7个子表,每个子表都要进行一遍最优地理探测器运算,之前的做法是分别把子表另存为新文件,然后一个一个跑,此代码实现了一次性批量计算子表的相关指标,并保存为txt文件。此代码假设所有变量都是连续变量,如果有类别变量,可结合AI进一步调整修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96487.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ JSON 数据库:jsoncpp

jsoncpp1. JSON数据1.1 JSON 的基本语法规则1. 基础语法要求两种核心数据结构JSON 与其他数据格式的对比1.2 JSON 的典型应用场景1.3 JSON 解析与生成工具2. 编程语言库&#xff08;解析/生成&#xff09;1.4 常见错误与注意事项2. jsoncpp2.1 基本用法1. 安装与集成2. 核心类与…

《苍穹外卖》项目日记_Day9

前言&#xff1a; 上午就把今天任务完成了&#xff0c;就继续往后学了一些知识&#xff0c;晚上写下笔记总结一下。 今日完成任务&#xff1a; 调用百度地图开放平台&#xff0c;优化用户下单业务学习SpringTask&#xff0c;定时处理超时、派送中订单学习WebSocket&#xff0c;…

人工智能学习:Transformer结构中的编码器层(Encoder Layer)

Transformer结构中的编码器层(Encoder Layer) 一、编码器层介绍 概念 编码器层(Encoder Layer)是Transformer编码器的基本构建单元,它重复堆叠形成整个编码器,负责逐步提取输入序列的特征。每个编码器层由两个核心子层组成: 多头自注意力机制(Multi-Head Self-Attentio…

2018年下半年 系统架构设计师 综合知识

1.在磁盘调度管理中&#xff0c;应先进行移臂调度&#xff0c;再进行旋转调度。假设磁盘移动臂位于21 号柱面上&#xff0c;进程的请求序列如下表所示。如果采用最短移臂调度算法&#xff0c;那么系统的响应 序列应为(D )。A. ②⑧③④⑤①⑦⑥⑨ …

数据库的连接_qt

数据库的连接形式可以通过cmd查看 1.获取 UI 输入的连接参数 // 获取主机名&#xff08;如"localhost"或IP地址&#xff09; QString hostStr hostEdit->text(); // 从hostEdit控件获取文本 QByteArray hostBa hostStr.toUtf8(); // 转换为UTF-8编码的字节数…

HTML 设计与使用入门

HTML 设计与使用入门 一、完整示例&#xff08;基础页面模板&#xff09;这是一个结构清晰、可直接拷贝运行的最小 HTML 模板&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"utf-8"><meta name"vie…

Gradio全解11——Streaming:流式传输的视频应用(2)——Twilio:网络服务提供商

Gradio全解11——Streaming&#xff1a;流式传输的视频应用&#xff08;2&#xff09;——Twilio&#xff1a;网络服务提供商11.2 Twilio&#xff1a;网络服务提供商11.2.1 Twillo穿透服务与TURN服务器1. 什么是STUN、TURN和ICE&#xff1f;2. Twilio介绍及网络穿透服务3. Twil…

【更新至2024年】2009-2024年各地级市金融科技水平数据

【更新至2024年】2009-2024年各地级市金融科技水平数据 1、时间&#xff1a;2009-2024年 2、来源&#xff1a;天眼查 3、指标&#xff1a;年份、省份、地级市、地级市代码、当年新注册金融科技公司数量、累计注册金融科技公司数量、金融科技水平 4、范围&#xff1a;地级市…

一般软件加载显示图片的流程

目录 1、一般图片浏览软件的流程&#xff08;Qt 或类似框架&#xff09;&#xff1a; 1️⃣ 读取原始数据 2️⃣ 解析图片格式 3️⃣ 存储到内部可用的绘制对象 4️⃣ 显示到界面 ✅ 总结 2、那什么叫“QPixmap 在 Qt 里就是“显示专用的像素缓存”&#xff0c;不是原始…

【论文阅读】REFRAG:一个提升RAG解码效率的新思路

引言 看到一则报道[1]&#xff0c;重组后的Meta实验室在9月1号发布了一篇关于提升RAG解码效率的论文&#xff0c;提出的思路有点启发作用&#xff0c;于是把原文下载下来仔细看下。 论文标题&#xff1a;REFRAG: Rethinking RAG based Decoding 论文地址&#xff1a;https://ar…

QT M/V架构开发实战:QFileSystemModel介绍

目录[TOC](目录)前言一、QFileSystemModel初步介绍二、基本功能1.创建2.基本属性与方法三、示例&#xff08;简单的文件浏览器&#xff09;四、性能注意事项前言 本文主要介绍的是使用代码生成的情况下对控件的介绍&#xff0c;包括拥有的功能及能修改的样式&#xff0c;也会说…

视频生成迎来效率革命!字节提出视频生成稀疏注意力机制,计算量降20倍,速度升17.79倍!

论文链接&#xff1a;https://arxiv.org/pdf/2509.01085亮点直击BSA——一种可训练的双向动态稀疏注意力框架&#xff0c;该框架首次在视频扩散训练中对全注意力机制中的查询&#xff08;Query&#xff09;及键值对&#xff08;Key-Value&#xff09;进行正交稀疏化处理以加速训…

STM32HAL库_cubeMX

ADC简介STM32f103的是12位逼近型ADC代码连续非扫描模式&#xff08;1个通道&#xff09;1&#xff1a;校准ADC&#xff08;这个可要可不要&#xff09;2&#xff1a;ADC初始化3&#xff1a;配置ADC通道&#xff08;这个函数只有一个通道时就是可要可不要&#xff09;4&#xff…

【Qt】清空QDateTimeEdit

代码 ui->startDate->setSpecialValueText(" "); //这里是空格 ui->startDate->setMinimumDate(QDate(2024, 1, 1)); ui->startDate->setDate(QDate::fromString("2024-01-01", "yyyy-MM-dd"));原理 设置特殊值显示文本&#…

LiTS 2017 datasets

下载记录 论文地址&#xff1a;https://doi.org/10.1016/j.media.2022.102680 官方下载链接&#xff1a;https://competitions.codalab.org/competitions/17094 进入链接后&#xff0c;需要先注册才能拿到下载点击Train data下面的Mirro1&#xff0c;在google云盘会看到Trai…

kafka3.8集群搭建

kafka集群需要三台机器搭建&#xff0c;并使用内置zookeeperIP10.0.0.110.0.0.210.0.0.3安装jdk # ubuntu sudo apt install -y openjdk-8-jdk-headless # centos sudo yum install -y java-1.8.0-openjdk下载kafka wget https://archive.apache.org/dist/kafka/3.8.1/kafka_2…

从15kHz 到20MHz:为什么LTE带宽不能被子载波间隔整除?

从 15 kHz 到 20 MHz&#xff1a;为什么 LTE 带宽不能被子载波间隔整除&#xff1f; 1. 引言 在 LTE 系统中&#xff0c;子载波间隔被固定为 15 kHz&#xff0c;而系统带宽却被设计为 1.4、3、5、10、15、20 MHz 六个档位。乍一看&#xff0c;这些带宽似乎无法被 15 kHz 整除&a…

html css js网页制作成品——HTML+CSS娃娃店网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML

【计算机网络 | 第15篇】动态主机配置协议

文章目录为何需要DHCP&#xff1f;手动配置的痛点&#x1f914;DHCP的基本工作模式&#x1f95d;DHCP的核心功能&#xff1a;IP地址的动态管理&#x1f95d;租用期的特点租用期的管理机制DHCP四步工作流程&#xff1a;从“发现”到“绑定”&#x1f426;‍&#x1f525;中继代理…

嵌入式系统内存分段核心内容详解

一、嵌入式内存分段整体规则&#xff08;按地址从低到高&#xff09;嵌入式系统内存按 “功能 属性” 划分为 6 个核心段&#xff0c;地址从低到高依次分布&#xff0c;各段职责与存储对象明确&#xff0c;具体规则如下表&#xff1a;地址范围段类型&#xff08;Segment&#…