Thank you for the reproducible example, but it is not clear what cross product
you want. Jim's solution gives you the cross product of the 2-column matrix
with itself. If you want the cross product between the columns you need
something else. The aggregate function will not work since it will treat the
columns separately:
> A <- as.matrix(myData[myData$Z=="A", 1:2])
> A
X Y
1 1 4
2 2 3> crossprod(A) # Same as t(A) %*% A
X Y
X 5 10
Y 10 25> crossprod(A[, 1], A[, 2]) # Same as t(A[, 1] %*% A[, 2]
[,1]
[1,] 10>
> # For all the groups
> lapply(split(myData, myData$Z), function(x) crossprod(as.matrix(x[, 1:2])))
$A
X Y
X 5 10
Y 10 25
$B
X Y
X 25 10
Y 10 5
> lapply(split(myData, myData$Z), function(x) crossprod(x[, 1], x[, 2]))
$A
[,1]
[1,] 10
$B
[,1]
[1,] 10
-------------------------------------
David L Carlson
Department of Anthropology
Texas A&M University
College Station, TX 77840-4352
-----Original Message-----
From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Jim Lemon
Sent: Tuesday, August 23, 2016 6:02 PM
To: Gang Chen; r-help mailing list
Subject: Re: [R] aggregate
Hi Gang Chen,
If I have the right idea:
for(zval in levels(myData$Z))
crossprod(as.matrix(myData[myData$Z==zval,c("X","Y")]))
Jim
On Wed, Aug 24, 2016 at 8:03 AM, Gang Chen <gangchen6 at gmail.com>
wrote:> This is a simple question: With a dataframe like the following
>
> myData <- data.frame(X=c(1, 2, 3, 4), Y=c(4, 3, 2, 1), Z=c('A',
'A', 'B', 'B'))
>
> how can I get the cross product between X and Y for each level of
> factor Z? My difficulty is that I don't know how to deal with the fact
> that crossprod() acts on two variables in this case.
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.