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

R语言双数据表关联统计:按邮编与时间统计同地区存续银行数量

问题原因

  1. 你的for循环存在语法错误:for (row in 1:nrow(Data_firm){ 缺少右括号,正确写法应为for (row in 1:nrow(Data_firm)){,语法错误会导致代码无法正常执行,得到错误结果。
  2. 核心逻辑问题:time、entry、exit三个字段均为字符类型,当时间为多位数时(比如"10"月),字符比较按位对比的规则会出现"10" < "2"的逻辑错误;即使是单个数字的测试场景,如果字段被默认存为因子类型,也会因为因子的内部编码规则导致比较逻辑完全失效。

可行解决方案

方案1:修复原有循环逻辑

先将时间字段转为数值型,再运行修正后的循环:

# 先把所有时间字段转为数值型
Data_firm$time <- as.numeric(Data_firm$time)
Data_bank$entry <- as.numeric(Data_bank$entry)
Data_bank$exit <- as.numeric(Data_bank$exit)

# 修正括号后的循环
for (row in 1:nrow(Data_firm)){
  dep <- Data_firm[row, "postal"]
  time <- Data_firm[row, "time"]
  count <- sum(Data_bank$Postal_bank == dep & Data_bank$entry <= time & Data_bank$exit > time, na.rm = TRUE)
  Data_firm[row,"nbbankindepartment"] <- count
}

方案2:更高效的向量化运算(适配大型数据集)

如果数据集体量较大,循环执行效率极低,可以用dplyr的连接操作实现需求,运行速度提升非常明显:

library(dplyr)

Data_firm <- Data_firm %>%
  mutate(time = as.numeric(time)) %>%
  left_join(Data_bank %>% 
              mutate(entry = as.numeric(entry), exit = as.numeric(exit)),
            by = c("postal" = "Postal_bank")) %>%
  group_by(Firm, time, postal) %>%
  summarise(nbbankindepartment = sum(entry <= time & exit > time, na.rm = T),
            .groups = "drop")

两种方案运行后得到的nbbankindepartment列均符合预期的c(1,2,1)结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:08