Bruno Cutayar wrote:


Hi,
i have two data.frame x and y like :
 > x <- data.frame( num = c(1:10), value = runif(10) )
 > y <- data.frame( num = c(6:10), value = runif(5) )
and i want to obtain something like :

num.x    value.x     num.y   value.y
     1 0.38423828    NA 0.2911089
     2 0.17402507    NA 0.8455208
     3 0.54443465    NA 0.8782199
     4 0.04540406    NA 0.3202252
     5 0.46052426    NA 0.7560559
     6 0.61385464     6 0.2911089
     7 0.48274968     7 0.8455208
     8 0.11961778     8 0.8782199
     9 0.64531394     9 0.3202252
   10 0.92052805    10 0.7560559

with NA in case of missing value for y to x.

{ for this example : i write simply
> data.frame(num.x=c(1:10), value.x=x[[2]],num.y=c(rep(NA,5),6:10),value.y=y[[2]]) }


I didn't find solution in merge(x,y,by="num") : missing rows are no keeping.
Can't you help me ?



See ?merge which will tell you about the `all' argument. I believe you want something like (though I'm not completely sure):


m <- merge(x, y, by = "num", all = TRUE)
# now add `num.x' and `num.y' as in your example
na.x <- is.na(m$value.x)
na.y <- is.na(m$value.y)
m$num.x <- ifelse(m$num %in% x$num, m$num, NA)
m$num.y <- ifelse(m$num %in% y$num, m$num, NA)
# fill in `value.x' and `value.y' with repeated values
m$value.x[na.x] <- rep(x$value, length.out = sum(na.x))
m$value.y[na.y] <- rep(y$value, length.out = sum(na.y))

HTH,

--sundar

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to