如何在R中按年份数量重复数据框行并添加Year列?
在R中为数据框添加年份列并重复每行的方法
首先构造示例数据和指定年份向量:
# 示例数据框 df <- data.frame( FirstName = c("Jim", "Amy", "Ravi"), MiddleName = c("J", "K", "M"), LastName = c("Jon", "White", "Khanna") ) # 需要的年份向量 target_years <- c(2020, 2021, 2022)
以下是三种常用的实现方式:
方法1:基础R原生实现
无需额外安装包,通过行索引重复和列拼接完成:
# 重复每行,次数等于年份的数量 df_repeated <- df[rep(seq_len(nrow(df)), each = length(target_years)), ] # 添加Year列,将年份向量重复对应次数 df_repeated$Year <- rep(target_years, nrow(df)) # 重置行名(可选,让结果更整洁) rownames(df_repeated) <- NULL
方法2:使用tidyverse工具链
借助dplyr和tidyr的函数,代码更简洁易读:
library(tidyverse) df_result <- df %>% # 生成原数据与年份的所有组合(笛卡尔积) crossing(Year = target_years) %>% # 保持原数据的姓名顺序(可选,匹配示例输出的顺序) arrange(match(FirstName, df$FirstName))
方法3:使用data.table包
适合处理大数据集,运行效率更高:
library(data.table) setDT(df) df_result <- df[, .(Year = target_years), by = .(FirstName, MiddleName, LastName)]
以上三种方法都能生成你需要的结果,可根据自己的包使用习惯选择。
内容的提问来源于stack exchange,提问作者Haider Imam
相关产品推荐
相关产品推荐

