one way is:

x <- matrix(c(10,20,30,40,0,
    10,10,10,10,50,
    30,30,30,5,5), nrow=3, ncol=5, byrow=TRUE,
    dimnames = list(1:3, letters[1:5])
)

ind <- combn(ncol(x), 2)
out <- apply(ind, 2, function (i) as.numeric(x[, i[1]] >= x[, i[2]]))
colnames(out) <- apply(ind, 2, function (i, nams)
    paste(nams[i[1]], nams[i[2]], sep = ""), nams = colnames(x))
out


I hope it helps.

Best,
Dimitris


Iuri Gavronski wrote:
Hi,

I need to convert a ranking dataset (actually, it is an ipsative
scale) to paired-comparisons.

For example, if I have this data:
x <- matrix(c(10,20,30,40,0,
    10,10,10,10,50,
    30,30,30,5,5), nrow=3, ncol=5, byrow=TRUE,
    dimnames = list(1:3, letters[1:5])
)

For every pair of data, I would need to apply a transformation like:

if a < b, ab = 0, otherwise ab=1

In the end, I need a matrix like that:

ab ac ad ae bc bd be cd ce de
0  0  0  1  0  0  1  0  1  1
1  1  1  0  1  1  0  1  0  0
1  1  1  1  1  1  1  1  1  1

Would anyone suggest a "no loops" way for doing that?

By the way, I would need to apply a tetrachoric correlation to this
output matrix. Should I use package polycor? Any thoughts would be
welcome.

Thanks,

Iuri.

______________________________________________
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.


--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014

______________________________________________
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