我有一个数据表:

library(data.table)
(f <- data.table(id1=c(1,2,3,1,2,3),
                 id2=as.factor(c("a","a","b","c","b","d")),
                 v=1:6,
                 key=c("id1","id2")))
   id1 id2 v
1:   1   a 1
2:   1   c 4
3:   2   a 2
4:   2   b 5
5:   3   b 3
6:   3   d 6
> str(f)
Classes ‘data.table’ and 'data.frame':  6 obs. of  3 variables:
 $ id1: num  1 1 2 2 3 3
 $ id2: Factor w/ 4 levels "a","b","c","d": 1 3 1 2 2 4
 $ v  : int  1 4 2 5 3 6
 - attr(*, "sorted")= chr  "id1" "id2"
 - attr(*, ".internal.selfref")=<externalptr>

如何添加“缺失”行?

即,对于每个现有的id1,我希望存在id2的所有可能值(使用v=0)。

因此,我需要添加6行(id1的3个可能值* id2的4个可能值-6个现有行)。

最佳答案

我将获得id1id2中的唯一值,并使用data.table的交叉联接函数CJ进行联接,如下所示:

# if you've already set the key:
ans <- f[CJ(id1, id2, unique=TRUE)][is.na(v), v := 0L][]

# or, if f is not keyed:
ans <- f[CJ(id1 = id1, id2 = id2, unique=TRUE), on=.(id1, id2)][is.na(v), v := 0L][]

ans

关于r - 将缺失的行添加到数据表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22462405/

10-12 18:00