I need to do a cartesian product of two data frames. For example,
A = id weight type
10 20 a
10 30 b
25 10 c
B = date report
2007 y
2008 n
then C would be like after doing cartesian product of A and B
C = id weight type date report
10 20 a 2007 y
10 20 a 2008 n
10 30 b 2007 y
10 30 b 2008 n
25 10 c 2007 y
25 10 c 2008 n
as some ids are the same in A, so I cannot use a way like
C <- merge(A$id,B$date)
C <- merge(C,A,by="id")
C <- merge(C,B,by="date")
This way will generate more rows. Could anyone help me out of here? Thanks
merge(A, B)
, provided there are no columns linking the two, should do this by default, no?
From ?merge
(emphasis mine):
If by or both by.x and by.y are of length 0 (a length zero vector or NULL), the result, r, is the Cartesian product of x and y, i.e., dim(r) = c(nrow(x)*nrow(y), ncol(x) + ncol(y)).
Admittedly, this does require one to know to look in ?merge
. Context-based searching in R is severely lacking; even rseek doesn't immediately provide this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With