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

在R中实现类Excel INDEX MATCH,提取各国最新通胀有效数据

解决R中提取各国最新非NA通胀数据的问题

方法一:使用tidyverse工具(推荐,代码更简洁易读)

先把宽格式的dta转成长格式,再按国家分组筛选最新非NA数据,最后合并到new_frm中:

# 先安装并加载tidyverse包(未安装则运行install.packages("tidyverse"))
library(tidyverse)

# 1. 将宽表转长表,移除通胀值为NA的行
long_dta <- dta %>%
  pivot_longer(cols = -日期, names_to = "Country", values_to = "Inflation") %>%
  drop_na(Inflation)

# 2. 按国家分组,取最新日期的非NA通胀值
latest_inflation <- long_dta %>%
  group_by(Country) %>%
  arrange(desc(日期)) %>% # 按日期降序排序
  slice(1) %>% # 取每组第一行(最新数据)
  ungroup() %>%
  select(Country, Inflation)

# 3. 合并到new_frm,填充Latest列
new_frm <- new_frm %>%
  left_join(latest_inflation, by = "Country") %>%
  rename(Latest = Inflation)

方法二:基础R实现(无需额外包)

如果不想加载tidyverse,用基础R循环处理每个国家列:

# 获取所有国家列名(排除日期列)
countries <- setdiff(colnames(dta), "日期")

# 循环提取每个国家的最新非NA通胀值
latest_values <- sapply(countries, function(country) {
  # 筛选该国家非NA的行
  non_na_rows <- dta[!is.na(dta[[country]]), ]
  if (nrow(non_na_rows) == 0) return(NA) # 全为NA时返回NA
  
  # 按日期降序排序,取第一行的通胀值
  sorted_rows <- non_na_rows[order(non_na_rows$日期, decreasing = TRUE), ]
  sorted_rows[1, country]
})

# 转成数据框并合并到new_frm
latest_df <- data.frame(Country = names(latest_values), Latest = latest_values)
new_frm <- merge(new_frm, latest_df, by = "Country", all.x = TRUE)

注意事项

  • 如果你的日期列不是日期格式,先执行dta$日期 <- as.Date(dta$日期),确保排序逻辑正确。
  • 若某个国家的通胀数据全为NA,代码会在Latest列填充NA,可根据需求修改(比如替换为0或特定标记)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:42:08