R语言数据处理需求:每行后加两行空行并按2001-2003排序year列
数据框行后添加两行空行并按指定year顺序排列的解决方案
需求说明
需要完成两个操作:
- 在数据框的每一行后添加两行空行(空行对应
var1和var2为NA) - 将
year列按照2001、2002、2003的固定顺序重新排列,每一组三行对应这个顺序
初始数据
df <- data.frame(var1 = c(1,2,3,4,5,6,7,8,9), var2 = c('a','b','c','d','e','f','g','h','i'), year = c(2001, 2003, 2003, 2001, 2002, 2003,2002,2003,2001))
解决方案代码
可以使用dplyr和tidyr包高效实现需求,步骤如下:
- 加载所需工具包
library(dplyr) library(tidyr)
- 处理数据:对每一行原数据生成三行,按指定year顺序填充,非原行的
var1和var2设为NA
df2 <- df %>% rowwise() %>% # 为每一行扩展出year序列为2001、2002、2003的三行 expand_grid(year_seq = c(2001, 2002, 2003)) %>% # 仅保留原year对应的行的var1和var2值,其余设为NA mutate( var1 = ifelse(year_seq == year, var1, NA), var2 = ifelse(year_seq == year, var2, NA) ) %>% ungroup() %>% # 调整列顺序,将year_seq重命名为year select(var1, var2, year = year_seq)
结果验证
生成的df2与需求中的期望输出结构一致:每一行原数据后跟随两行NA行,year列严格按照2001、2002、2003的顺序循环排列。
内容的提问来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

