给定data.table如下,id1
是主题级ID,id2
是主题内重复测量ID,X
是数据变量,其中有许多。我想平衡数据,以便每个人都有相同的行数(重复的度量),即max(DT[,.N,by=id1][,N])
,但id1
和id2
根据需要进行调整,{对于这些新行,{1}}数据值将替换为X
。
以下内容:
NA
应该是这样的:
DT = data.table(
id1 = c(1,1,2,2,2,3,3,3,3),
id2 = c(1,2,1,2,3,1,2,3,4),
X1 = letters[1:9],
X2 = LETTERS[1:9]
)
setkey(DT,id1)
如何使用DT = data.table(
id1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
id2 = c(1,2,3,4,1,2,3,4,1,2,3,4),
X1 = c(letters[1:2],NA,NA,letters[3:5],NA,letters[6:9]),
X2 = c(LETTERS[1:2],NA,NA,LETTERS[3:5],NA,LETTERS[6:9])
)
执行此操作?要避免For循环,因为这个数据集非常庞大。这是data.table
的工作吗?
答案 0 :(得分:4)
您可以尝试:
DT2 <- CJ(id1=1:3, id2=1:4)
merge(DT,DT2, by=c('id1', 'id2'), all=TRUE)
答案 1 :(得分:2)
在这里,akron的答案略有不同,通常用于解决手头的问题:
setkey(DT, id1, id2)
DT[CJ(unique(id1), unique(id2))]