在R中如何用少循环方法基于两个关联数据集快速计算各name对应年份范围
实现方案
核心逻辑
全程采用底层优化的向量化运算,无显式循环,适配大数据量的高性能处理需求,步骤如下:
- 按公共列
code关联两个数据集,得到包含code、name、Year的中间表 - 按
name分组,计算每组内年份的最大值减最小值得到Range,将计算结果匹配到对应分组的所有行 - 筛选保留
code、Year、Range三列得到最终结果
Python(Pandas)实现代码
import pandas as pd # 读取两个数据集(实际使用时替换为pd.read_csv等读取接口即可) df_name = pd.DataFrame({ "code": [115, 120, 125, 130, 140], "name": ["A", "B", "A", "C", "A"] }) df_year = pd.DataFrame({ "code": [115, 140, 120, 130, 125], "Year": [2015, 2020, 2017, 2019, 2011] }) # 关联数据集+分组计算Range result = pd.merge(df_name, df_year, on="code", how="inner") result["Range"] = result.groupby("name")["Year"].transform(lambda x: x.max() - x.min()) # 输出指定列 result = result[["code", "Year", "Range"]]
R(dplyr)实现代码
library(dplyr) # 读取两个数据集(实际使用时替换为read.csv等读取接口即可) df_name <- tibble( code = c(115, 120, 125, 130, 140), name = c("A", "B", "A", "C", "A") ) df_year <- tibble( code = c(115, 140, 120, 130, 125), Year = c(2015, 2020, 2017, 2019, 2011) ) # 关联+分组计算+筛选列 result <- df_name %>% inner_join(df_year, by = "code") %>% group_by(name) %>% mutate(Range = max(Year) - min(Year)) %>% ungroup() %>% select(code, Year, Range)
两种实现的运算效率都远高于自定义循环实现,可直接用于千万级数据量的处理场景。
内容的提问来源于stack exchange,提问作者shokoufa zeynali
相关产品推荐
相关产品推荐

