尝试使用基于另一个NA值的参考数据帧创建新数据帧

时间:2015-12-31 16:07:47

标签: r

解释这有点奇怪。我有两个数据帧。第一个是参考,第二个可能有或没有缺失值。两个数据帧共享相同的变量。如果第二个数据帧中有NA,我想根据参考值创建一个新的数据帧,但删除那个丢失的变量。每个奇数和偶数变量都是相关的。因此,如果奇数变量具有NA值,则需要在新数据帧中删除该变量+下一个变量。如果存在具有NA值的偶数变量,则需要删除变量+前一个变量。因此var 1和var 2是相关的,var 3和var 4,var 5和var 6等。或多或少我有它工作,但我的代码有NULL值问题。

is.odd <- function(x) x %% 2 == 1
apply(new, 1, function(x) {

    if(is.odd(which(is.na(x)))) {
        toremove=c(which(is.na(x)), which(is.na(x))+1)
    }

    if(!is.odd(which(is.na(x)))) {
        toremove=c(which(is.na(x)), which(is.na(x))-1)
    }

    ref[,!(1:ncol(ref) %in% toremove), drop=F]
})

我得到的错误是&#34;错误if(is.odd(which(is.na(x)))){:参数的长度为零&#34;。

这是我想要的一个例子。第一个是参考数据框:

    var1    var2    var3    var4
1    q        w      e        r
2    t        y      u        i
3    o        p      a        s
4    d        f      g        h

第二个缺少NA值:

    var1    var2    var3    var4
1    1        1      1        1
2    1        3      2        NA
3    1        NA     a        s
4    d        f      g        h

第二个数据帧的每一行用于根据参考值创建新的数据帧。对于第一行,输出应该是完整的,因为没有NA:

    var1    var2    var3    var4
1    q        w      e        r
2    t        y      u        i
3    o        p      a        s
4    d        f      g        h

对于第二行,输出应该缺少第3和第4个变量,因为第4行有一个NA而3 + 4(奇数+偶数)是相关的。 :

    var1    var2    
1    q        w      
2    t        y      
3    o        p     
4    d        f      

更新:我认为问题在于(is.na(x)返回数字(0)。我试图用以下方法控制:

if(!identical(which(is.na(x))), numeric(0)) {} 

但它似乎并不匹配。

1 个答案:

答案 0 :(得分:0)

我们可以尝试

 apply(df2, 1, function(x) {if(all(!is.na(x))) 
                       df1 else {
                          i1 <- which(is.na(x))
                      df1[-c(sapply(i1, function(i) 
                       if(!i%%2) c(max(1, i-1), i)
                        else c(i, min(length(x), i+1))))]
                              }
                              }
                              )

#$`1`
#  var1 var2 var3 var4
#1    q    w    e    r
#2    t    y    u    i
#3    o    p    a    s
#4    d    f    g    h

#$`2`
#  var1 var2
#1    q    w
#2    t    y
#3    o    p
#4    d    f

#$`3`
#  var3 var4
#1    e    r
#2    u    i
#3    a    s
#4    g    h

#$`4`
#  var1 var2 var3 var4
#1    q    w    e    r
#2    t    y    u    i
#3    o    p    a    s
#4    d    f    g    h
相关问题