On Aug 28, 2012, at 9:20 PM, R. Michael Weylandt wrote:

On Tue, Aug 28, 2012 at 9:01 PM, Yi <liuyi.fe...@gmail.com> wrote:
Dear all,

Suppose my data frame is as follows:

id  price  distance
1   2     4
1   3    5
...
2  4   8
2  5   9
...
n  3   7
n   8  9

I would like to calculate the rank-order correlation between price and
distance for each id.

cor(price,distance,method = "spearman") calculate a correlation for all.

Then I tried to use
apply(data,list='id',cor(price , distance , method = "spearman"))
to


You seem to have been cut off mid-thought,  but I'm guessing you want
something more like:

tapply(data, data$id, function(x), cor(x$price, x$distance, method =
"spearman"))

I am dubious. tapply takes an atomic vector rather than a dataframe as its first argument. Generally one needs to use an lapply(split()) or by() for such group operations involving more than one vector:

Here's my guess:

lapply( split(data, data$id), function(dfrm) { cor(x=dfrm[["price"]], y=dfrm[["distance"]], method = "spearman") } )

OR:

by(data, data$id, function(dfrm) cor( x=dfrm[["price"]], y=dfrm[["distance"]] , , method = "spearman") )

--

David Winsemius, MD
Alameda, CA, USA

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to