有条件地将元素插入向量中

时间:2014-02-18 19:06:32

标签: r

我正在尝试调整一些向量,使它们的长度都相同,以便将它们放入数据框中。通过在各种coef模型上使用lm调用生成向量。问题来自这样一个事实,即并非每个变量都出现在每个lm调用中,因此一些向量比其他向量短,但任何特定回归中缺失的变量都可以是随机的,例如:

>regression1
(Intercept)    var1        var2        var3         var4 
-0.08324358  5.52612036 -0.30234773  1.68640397 -0.45661553

>regression2
(Intercept)    var1        var2        var3 
   2.894916    5.029081   -1.838681   -4.570308 

>regression3
(Intercept)    var1        var2        var4
16.35817775  3.35612118  0.07659903 -1.50003495 

>regression4
(Intercept)    var1        var2     
16.35817775  3.35612118  0.07659903

所以我需要让最后三个向量看起来像:

>regression2
(Intercept)    var1        var2        var3    var4
2.894916     5.029081   -1.838681   -4.570308   0
>regression3
(Intercept)    var1        var2        var3    var4
16.35817775  3.35612118  0.07659903     0    -1.50003495 
>regression4
(Intercept)    var1        var2        var3    var4
16.35817775  3.35612118  0.07659903     0       0

我正在使用此测试:

vars <- c("(Intercept)","var1","var2","var3","var4")
test<- vars %in% names(regression3)

这给了我一个逻辑向量,表明缺少哪些变量:

[1] TRUE TRUE TRUE FALSE TRUE

我试图通过使用此调用

来填充0的FALSE
regression3 <- ifelse(test,regression3,0)

如果缺失值在最后顺序定位(似乎var3和var4都缺失,它将起作用)似乎有效,但在上面的情况下,在它之后有TRUE值,这将导致最后一个元素等于第一个元素,而不是第五个元素。我的ifelse语句有什么问题,还是有其他有效的方法可以有条件地将0添加到我的向量中?

2 个答案:

答案 0 :(得分:2)

如果您的目标是将“回归矢量”放入数据框中,那么您可以尝试这样做:将矢量放入列表,将它们转换为数据帧,使用rbind.fill从{绑定数据帧{1}}包(“plyr填充rbinds”缺少列的数据框列表,并将NA替换为零。

NA

答案 1 :(得分:1)

这是一种方法:

setNames(replace(numeric(length(vars)), 
                 vars %in% names(regression3), regression3), vars)

(Intercept)        var1        var2        var3        var4 
16.35817775  3.35612118  0.07659903  0.00000000 -1.50003495 

这将使用当前变量的值替换数字向量中的零。