[R] merge without NA last
Milan Bouchet-Valat
nalimilan at club.fr
Fri May 31 10:28:47 CEST 2013
Le vendredi 31 mai 2013 à 18:07 +1000, nevil amos a écrit :
> I am trying to create a merge where the first value contains NA values. I
> wish to retain these in order. however when I use all.x=T and sort=F they
> are retained but na values are placed last:
>
> > X<-data.frame(k1=c("A",NA,"C","B"))
> > print (X)
> k1
> 1 A
> 2 <NA>
> 3 C
> 4 B
> > Y<-data.frame(k2=c(1,2,3),k3=c("A","B","C"))
> > Z<-merge(X,Y, by.x=1,by.y=2,all.x=T,sort=F)
> > print (Z)
> k1 k2
> 1 A 1
> 2 C 3
> 3 B 2
> 4 <NA> NA
>
>
> The result I need is
> k1 k2
> 1 A 1
> 2 <NA> NA
> 3 C 3
> 4 B 2
>
> how do I prevent NA c=values being sorted to last - I need to retain values
> in position.
merge(..., sort=FALSE) does not guarantee the order will be preserved,
even when NAs are not present. If you want to preserve the order, you
can add a sequence number to the original data frame:
X <- data.frame(k1=c("A",NA,"C","B"), id=seq.int(4))
and sort manually on that column after the merge.
Regards
More information about the R-help
mailing list