本文介绍了将缺失的行添加到数据表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数据表:
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
).
I.e., for each existing id1
I want all possible values of id2
to be present (with v=0
).
所以,我需要添加 6 行(id1
的 3 个可能值 * id2
的 4 个可能值 - 6 个现有行).
So, I need to add 6 rows (3 possible values of id1
* 4 possible values of id2
- 6 existing rows).
推荐答案
我会得到 id1
和 id2
中的唯一值并使用 进行连接data.table
的cross join函数CJ
如下:
I'd get the unique values in id1
and id2
and do a join using data.table
's cross join function CJ
as follows:
# 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
这篇关于将缺失的行添加到数据表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!