# Removing rows and columns in symmetric correlation matrix

Hi I have the following symmetric correlation matrix:

``````df <- data.frame(
A = c(1,0,2,3,0),
B = c(0,1,0,0,0),
C = c(2,0,1,4,0),
D = c(3,0,4,1,0)
E = c(0,0,0,0,1)
)
row.names(df) <- c('A','B','C', 'D', 'E')
df

A B C D E
A 1 0 2 3 0
B 0 1 0 0 0
C 2 0 1 4 0
D 3 0 4 1 0
E 0 0 0 0 1
``````

You can see that rows/columns B and E have all zeros except for the identity; I would like to remove these rows/columns so the following matrix is left:

``````  A C D
A 1 2 3
C 2 1 4
D 3 4 1
``````

Thanks for any help you can provide. I have tried for 2 hours now to solve this and I can not. I Tried telling it to delete rowsums == 1, then colsums ==0 but this didn't work either.

Thanks!

One quick and dirty way to do this is below,

``````df <- data.frame(
A = c(1,0,2,3,0),
B = c(0,1,0,0,0),
C = c(2,0,1,4,0),
D = c(3,0,4,1,0),
E = c(0,0,0,0,1)
)
row.names(df) <- c('A','B','C', 'D', 'E')

i_keep <- c()
for (col in names(df)){
if (sum(df[col]) !=1 ){
i_keep <- c(i_keep, col)
}
}
df[i_keep,i_keep]
#>   A C D
#> A 1 2 3
#> C 2 1 4
#> D 3 4 1
``````

Created on 2020-04-11 by the reprex package (v0.3.0)

I'd caution,

• This might not work on all matrices if values can be `>1`,
• This might be sluggish with large matrices.

beautiful thank you!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.