从矩阵中删除一列

Fah*_*997 5 r matrix

我对 R 有点陌生,想通过该列的名称从矩阵中删除一列。我知道这X[,2]给出了第二列,并X[,-2] 给出了除第二列之外的每一列。我真正想知道的是是否有使用列名的类似命令。我有一个矩阵并想删除“销售”列,但X[,-"sales"]似乎不适用于此。我该怎么做?我只会使用列号,我希望以后能够将它用于其他具有不同维度的矩阵。任何帮助将非常感激。

Lev*_*ley 9

我不确定为什么所有答案都是数据框的解决方案而不是矩阵的解决方案。

根据 @Sotos 和 @Moody_Mudskipper 的评论,这里是一个带有内置state.x77数据矩阵的示例。

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
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020-06-27 创建


bre*_*usn 2

我最喜欢的方式:

# create data
df <- data.frame(x = runif(100),
                 y = runif(100),
                 remove_me = runif(100),
                 remove_me_too = runif(100))

# remove column
df <- df[,!names(df) %in% c("remove_me", "remove_me_too")]
Run Code Online (Sandbox Code Playgroud)

所以这个数据框:

> df
              x           y  remove_me remove_me_too
1   0.731124508 0.535219259 0.33209113   0.736142042
2   0.612017350 0.404128030 0.84923974   0.624543223
3   0.415403559 0.369818154 0.53817387   0.661263087
4   0.199780006 0.679946936 0.58782429   0.085624708
5   0.343304259 0.892128112 0.02827132   0.038203599
Run Code Online (Sandbox Code Playgroud)

变成这样:

> df
              x           y
1   0.731124508 0.535219259
2   0.612017350 0.404128030
3   0.415403559 0.369818154
4   0.199780006 0.679946936
5   0.343304259 0.892128112
Run Code Online (Sandbox Code Playgroud)