R - 如何为唯一的组序列的缺失值添加行? [英] R - How to add rows for missing values for unique group sequences?
问题描述
我的问题类似于上一个问题为data.frame中缺少值添加行的最快方法?
My problem is similar to this previous question Fastest way to add rows for missing values in a data.frame?
我不知道如何添加填充了NA 当组的最小/最大值不同时。
I can't figure out how to add rows padded with "NA" when the min/max is different by group.
> red<-data.frame(project = c(6, 6, 6, 6, 6, 9, 9, 9), period =c(1, 2, 5:7, 2, 4, 5), v3=letters[1:8], v4=c("red", "yellow", recursive = T))
> red
project period v3 v4
1 6 1 a red
2 6 2 b yellow
3 6 5 c red
4 6 6 d yellow
5 6 7 e red
6 9 2 f yellow
7 9 4 g red
8 9 5 h yellow
我想要它看起来像:
project period v3 v4
6 1 a red
6 2 b yellow
6 3 NA NA
6 4 NA NA
6 5 c red
6 6 d yellow
6 7 e red
9 2 f yellow
9 3 NA NA
9 4 g red
9 5 h yellow
当我使用
library(data.table)
DT=as.data.table(red)
setkey(DT, project, period)
DT[CJ(unique(project), seq(min(period), max(period)))]
它使每个项目组有7个周期;项目6应该有1-7期,但是项目9应该有2-5期。
it made each project group have 7 periods; Project 6 should have periods 1-7, but Project 9 should have periods 2-5.
我试着用 .SD
I've tried fiddling with .SD[ which.max(period)], by=project]
but no cigar.
我认为应该在seq()中简单一些,但我试过 seq(min(period,by = project))
没有运气
I thought it should be something simple in the seq(), but I tried seq(min(period, by=project))
with no luck
谢谢! p>
Thank you!
推荐答案
DT[setkey(DT[, min(period):max(period), by = project], project, V1)]
# project period v3 v4
# 1: 6 1 a red
# 2: 6 2 b yellow
# 3: 6 3 NA NA
# 4: 6 4 NA NA
# 5: 6 5 c red
# 6: 6 6 d yellow
# 7: 6 7 e red
# 8: 9 2 f yellow
# 9: 9 3 NA NA
#10: 9 4 g red
#11: 9 5 h yellow
这篇关于R - 如何为唯一的组序列的缺失值添加行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!