R: duplicates elimination in a matrix, keeping track of multiplicities

I have a basic problem with R. I have produced the matrix

M
     [,1] [,2]
[1,] "a"  "1" 
[2,] "b"  "2" 
[3,] "a"  "3" 
[4,] "c"  "1" 

I would like to obtain the 3X2 matrix

     [,1] [,2] [,3]
[1,] "a"  "1"  "3" 
[2,] "b"  "2"  NA  
[3,] "c"  "1"  NA  

obtained by eliminating duplicates in M[,1] and writing in N[i,2], N[i,3] the values in M[,2] corresponding to the same element in M[,1], for all i's. The "NA"'s in N[,3] correspond to the singletons in M[,1].

I know how to eliminate duplicates from a vector in R: my problem is to keep track of the elements in M[,2] and write them in the resulting matrix N. I tried with for cycles but they do not work so well in my "real world" case, where the matrices are much bigger.

Any suggestions?

I thank you very much.

Answers


You can use dcast in the reshape2 package after turning your matrix to a data.frame. To reverse the process you can use melt.

df = data.frame(c("a","b","a","c"),c(1:3,1))
colnames(df) = c("factor","obs")
require(reshape2)
df2=dcast(df, factor ~ obs)

now df2 is:

 factor  1  2  3
1      a  1 NA  3
2      b NA  2 NA
3      c  1 NA NA

To me it makes more sense to keep it like this. But if you need it in your format:

res = t(apply(df2,1,function(x) {  newLine = as.vector(x[which(!is.na(x))],mode="any"); newLine=c(newLine,rep(NA, ncol(df2)-length(newLine) )) }))
res = res[,-ncol(res)]                           

     [,1] [,2] [,3]
[1,] "a"  " 1" " 3"
[2,] "b"  " 2" NA  
[3,] "c"  " 1" NA  

Need Your Help

Hibernate 4.0 hibernatetool taskdef error

hibernate hbm2ddl

I'm using hibernate 4.0.0.CR4 and was trying the "Message" example from Java Persistence with Hibernate. I was able to compile and run the applicaiton using the ant build, but when i try exporting ...

download as csv using struts 2

java ajax jsp csv struts2

I want to write some data to a csv file and user should be able to download it through browser.