所以,我有一个包含两个因子和一个数字变量的数据框,如下所示:
>D
f1 f2 v1
1 A 23
2 A 45
2 B 27
.
.
.
Run Code Online (Sandbox Code Playgroud)
所以f1的水平是1和2,而f2的水平是A和B.这就是f1 = 1和f2 = B时没有输入的值(即D $ V1 [D $ f1 = 1& D $ f2 = B]不存在)实际上这应该是零.
在我的实际数据帧中,我有11个级别的f1和接近150个级别的f2,我需要为我的数据帧中缺少的f1和f2的每个组合创建一个v1 = 0的观察.
我该怎么做呢?
提前致谢,
伊恩
Rei*_*son 12
使用您的数据:
dat <- data.frame(f1 = factor(c(1,2,2)), f2 = factor(c("A","A","B")),
v1 = c(23,45,27))
Run Code Online (Sandbox Code Playgroud)
一个选项是创建一个包含级别组合的查找表,这是使用expand.grid()随两个因素的级别提供的函数完成的,如下所示:
dat2 <- with(dat, expand.grid(f1 = levels(f1), f2 = levels(f2)))
Run Code Online (Sandbox Code Playgroud)
然后可以使用merge()我们指定查找表中的所有值都包含在join(all.y = TRUE)中的函数来执行类似数据库的连接操作
newdat <- merge(dat, dat2, all.y = TRUE)
Run Code Online (Sandbox Code Playgroud)
以上行产生:
> newdat
f1 f2 v1
1 1 A 23
2 1 B NA
3 2 A 45
4 2 B 27
Run Code Online (Sandbox Code Playgroud)
如您所见,缺失的组合被赋予NA表示缺失的值.NA用0s 替换这些s 是非常简单的:
> newdat$v1[is.na(newdat$v1)] <- 0
> newdat
f1 f2 v1
1 1 A 23
2 1 B 0
3 2 A 45
4 2 B 27
Run Code Online (Sandbox Code Playgroud)