简体   繁体   中英

R: Compare values in a read table and update another matrix

I am currently having a problem utilizing R to compare each column within a specific matrix. I have attempted to compare each of the entire columns at once, and generate a true and false output via the table command, and then convert the number of trues that can be found to a numeric value and input such values in their respective places within the incidence matrix.

For example, I have data in this type of format:
//Example state matrix - I am attempting to compare c1 with c2, then c1 with c3, then c1 with c4 and so on and so forth 
    c1  c2  c3  c4
r1  2   6   3   2
r2  1   1   6   5
r3  3   1   3   6

And I am trying to instead put it into this format
//Example incidence matrix - Which is how many times c1 equaled c2 in the above matrix 
    c1  c2  c3  c4
c1  3   1   1   1
c2  1   3   0   0
c3  1   0   3   0
c4  1   0   0   3

Here is the code I have come up with so far, however, I keep getting this particular error --

Warning message: In IncidenceMat[rat][r] = IncidenceMat[rat][r] + as.numeric(instances) :number of items to replace is not a multiple of replacement length
rawData = read.table("5-14-2014streamW636PPstate.txt") colnames = names(rawData) #the column names in R df <- data.frame(rawData) rats = ncol(rawData) instances = nrow(rawData) IncidenceMat = matrix(rep(0, rats), nrow = rats, ncol = rats) for(rat in rats) for(r in rats) if(rat == r){rawData[instance][rat] == rawData[instance][r] something like this would work in C++ if I attempted, IncidenceMat[rat][r] = IncidenceMat[rat][r] + as.numeric(instances) } else{ count = df[colnames[rat]] == df[colnames[r]] c = table(count) TotTrue = as.numeric(c[2][1]) IncidenceMat[rat][r] = IncidenceMat[rat][r] + TotTrue #count would go here #this should work like a charm as well }

Any help would be greatly appreciated; I have also looked at some of these resources, however, I am still stumped

I tried this and this along with some other resources I recently closed.

How about this (note the incidence matrix is symmetric)?

df
   c1 c2 c3 c4
r1  2  6  3  2
r2  1  1  6  5
r3  3  1  3  6

incidence <- matrix(rep(0, ncol(df)*ncol(df)), nrow=ncol(df))
diag(incidence) <- nrow(df)
for (i in 1:(ncol(df)-1)) {
   for (j in (i+1):ncol(df)) {
     incidence[i,j] = incidence[j,i] = sum(df[,i] == df[,j])
   }
}

incidence
     [,1] [,2] [,3] [,4]
[1,]    3    1    1    1
[2,]    1    3    0    0
[3,]    1    0    3    0
[4,]    1    0    0    3

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM