在 rbind.fill 中指定 "fill value"

specify "fill value" in rbind.fill

ds2 已经包含一个 NA。我想区分 "already there" NA 和填充生成的 NA

library(plyr)
l <- LETTERS[]
ds1 <- data.frame(a=l[1:3],b=l[5:7],c=l[7:9],d=l[10:12],stringsAsFactors = F)
ds2 <- data.frame(a=NA,b=l[23], c=l[22],stringsAsFactors = F)

rbind.fill(ds1,ds2)

给出:

     a b c    d
1    A E G    J
2    B F H    K
3    C G I    L
4 <NA> W V <NA>

我想要那个:

     a b c    d
1    A E G    J
2    B F H    K
3    C G I    L
4 <NA> W V  foobar

我需要一个通用的解决方案来设置特定的 "fill value" 绑定数据帧。

我知道我可以这样区分 NA:

ds2[is.na(ds2)] <- "alreadyFooBar"
rbind.fill(ds1,ds2)

              a b c    d
1             A E G    J
2             B F H    K
3             C G I    L
4 alreadyFooBar W V <NA>

有可能反过来吗?

我认为这应该可以满足您的需求:

library(plyr)
library(dplyr)
l <- LETTERS[]
ds1 <- data.frame(a=l[1:3],b=l[5:7],c=l[7:9],d=l[10:12],],stringsAsFactors = F)
ds2 <- data.frame(a=NA,b=l[23], c=l[22],stringsAsFactors = F)

NewCols <- setdiff(colnames(ds1),colnames(ds2))
ds2[NewCols] <- "fooBar"
rbind.fill(ds1,ds2)

给出:

     a b c      d
1    A E G      J
2    B F H      K
3    C G I      L
4 <NA> W V fooBar

谢谢。我创建了我将来可以依赖的功能。即使两个输入都可能缺少列

fast.rbind <- function(x,y,value=NA){
    x[setdiff(colnames(y),colnames(x))] <- value

    y[setdiff(colnames(x),colnames(y))] <- value

    return(rbind(x,y))
}

x <- data.frame(a=l[1:3],b=l[5:7],c=l[7:9],d=l[10:12],stringsAsFactors = F)
y <- data.frame(a=NA, z=l[22],stringsAsFactors = F)
fast.rbind(x,y,"foobar")