2017-04-03 13 views
0

ds2には既にNAが含まれています。私は、 "既に存在する" NAと、充填によって生成されたNAとを区別したい。rbind.fillに "fill value"を指定してください

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 

私はデータフレームをrbinding時に "値を埋める" 特定を設定するための一般的なソリューションを必要としています。

は、私はそのようなNASに区別することができ知っている:

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> 

可能性が周囲の他の方法はありますか?

+0

フィードバックを提出することなく、downvoteをしないでください!どうすれば改善できますか? –

答えて

1

私は、これはあなたが探している何を取得すべきだと思う:

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 
+0

非常にいいです。その方法は私がここで提案するベースrbindでさえも動作します。 –

0

ありがとうございました。私は将来私が頼りにできる機能を作りました。両方の入力にも列がない可能性があります

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") 
関連する問題