Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing a column from a matrix

Tags:

r

matrix

I'm a bit new to R and wanting to remove a column from a matrix by the name of that column. I know that X[,2] gives the second column and X[,-2] gives every column except the second one. What I really want to know is if there's a similar command using column names. I've got a matrix and want to remove the "sales" column, but X[,-"sales"] doesn't seem to work for this. How should I do this? I would use the column number only I want to be able to use it for other matrices later, which have different dimensions. Any help would be much appreciated.

like image 835
Fahrenheit997 Avatar asked Feb 12 '18 13:02

Fahrenheit997


1 Answers

I'm not sure why all the answers are solutions for data frames and not matrices.

Per @Sotos's and @Moody_Mudskipper's comments, here is an example with the builtin state.x77 data matrix.

dat <- head(state.x77)
dat
#>            Population Income Illiteracy Life Exp Murder HS Grad Frost   Area
#> Alabama          3615   3624        2.1    69.05   15.1    41.3    20  50708
#> Alaska            365   6315        1.5    69.31   11.3    66.7   152 566432
#> Arizona          2212   4530        1.8    70.55    7.8    58.1    15 113417
#> Arkansas         2110   3378        1.9    70.66   10.1    39.9    65  51945
#> California      21198   5114        1.1    71.71   10.3    62.6    20 156361
#> Colorado         2541   4884        0.7    72.06    6.8    63.9   166 103766

# for removing one column
dat[, colnames(dat) != "Area"]
#>            Population Income Illiteracy Life Exp Murder HS Grad Frost
#> Alabama          3615   3624        2.1    69.05   15.1    41.3    20
#> Alaska            365   6315        1.5    69.31   11.3    66.7   152
#> Arizona          2212   4530        1.8    70.55    7.8    58.1    15
#> Arkansas         2110   3378        1.9    70.66   10.1    39.9    65
#> California      21198   5114        1.1    71.71   10.3    62.6    20
#> Colorado         2541   4884        0.7    72.06    6.8    63.9   166

# for removing more than one column
dat[, !colnames(dat) %in% c("Area", "Life Exp")]
#>            Population Income Illiteracy Murder HS Grad Frost
#> Alabama          3615   3624        2.1   15.1    41.3    20
#> Alaska            365   6315        1.5   11.3    66.7   152
#> Arizona          2212   4530        1.8    7.8    58.1    15
#> Arkansas         2110   3378        1.9   10.1    39.9    65
#> California      21198   5114        1.1   10.3    62.6    20
#> Colorado         2541   4884        0.7    6.8    63.9   166

#be sure to use `colnames` and not `names`
names(state.x77)
#> NULL

Created on 2020-06-27 by the reprex package (v0.3.0)

like image 153
Levi Baguley Avatar answered Sep 30 '22 19:09

Levi Baguley