R语言data frame生成ID日期组合缺失行并填充NA及保留固定属性值
初始无属性列的补全方案
不需要做长宽转换,直接使用tidyr的complete()函数即可自动匹配所有ID和日期的全组合,任意数量的度量列都通用,完全保留原始列结构:
library(tidyr) library(dplyr) df_complete <- df %>% complete(IDs, dates)
运行后缺失的度量值会自动填充NA。
新增固定属性列后的补全方案
你之前的写法没有把ID对应的固定属性att纳入补全规则,所以新增行的att会被置为NA。只需调整complete()的参数,把ID和固定属性绑定即可:
df_complete <- df %>% complete(nesting(IDs, att), dates)
该写法逻辑:
nesting(IDs, att)会提取原始数据中已存在的ID和att的对应组合,不会生成非法的ID+属性组合- 再与所有存在的日期做交叉匹配,生成全部合法组合
- 度量列的缺失值自动填充NA,完全符合需求。
如果确认每个ID唯一对应一个att值,也可以用填充的方式实现:
df_complete <- df %>% complete(IDs, dates) %>% group_by(IDs) %>% fill(att, .direction = "downup") %>% ungroup()
内容的提问来源于stack exchange,提问作者jazzyjay
相关产品推荐
相关产品推荐

