从矩阵中删除列

时间:2018-02-12 13:13:47

标签: r matrix

我对R有点新,并希望通过该列的名称从矩阵中删除列。我知道_.minBy(myList, 'Price'); 给出第二列,X[,2]给出除第二列之外的每一列。我真正想知道的是,是否存在使用列名的类似命令。我有一个矩阵,想要删除“销售”列,但X[,-2]似乎不适用于此。我该怎么做?我只会使用列号,我希望以后可以将它用于其他矩阵,它们具有不同的尺寸。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:2)

df <- data.frame(x = runif(10),
                 y = runif(10),
                 z = runif(10),
                 w = runif(10))
matrix_to_data_frame(df)

df$x<-NULL
df

答案 1 :(得分:1)

我最喜欢的方式:

# 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")]

所以这个数据框:

> 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

成为这个:

> 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

答案 2 :(得分:1)

与R一样,有许多潜在的解决方案。您可以使用包dplyrselect()轻松删除或选择数据框中的列。

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

library(dplyr)
select(df, -remove_me, -remove_me_too) %>% head()
#>            x           y
#> 1 0.35113636 0.134590652
#> 2 0.72545356 0.165608839
#> 3 0.81000067 0.090696049
#> 4 0.29882204 0.004602398
#> 5 0.93492918 0.256870750
#> 6 0.03007377 0.395614901

您可以详细了解dplyr及其动词here.

答案 3 :(得分:0)

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

根据@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

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

答案 4 :(得分:-1)

一般情况下,如果删除了如此多的列以至仅剩下一列,R会将其转换为数值向量。您可以通过设置drop = FALSE来阻止它。

(df <- data.frame(x = runif(6),
                  y = runif(6),
                  remove_me = runif(6),
                  remove_me_too = runif(6)))
#           x          y remove_me remove_me_too
# 1 0.4839869 0.18672217 0.0973506    0.72310641
# 2 0.2467426 0.37950878 0.2472324    0.80133920
# 3 0.4449471 0.58542547 0.8185943    0.57900456
# 4 0.9119014 0.12089776 0.2153147    0.05584816
# 5 0.4979701 0.04890334 0.7420666    0.44906667
# 6 0.3266374 0.37110822 0.6809380    0.29091746

df[, -c(3, 4)]
#           x          y
# 1 0.4839869 0.18672217
# 2 0.2467426 0.37950878
# 3 0.4449471 0.58542547
# 4 0.9119014 0.12089776
# 5 0.4979701 0.04890334
# 6 0.3266374 0.37110822

# Result is a numeric vector
df[, -c(2, 3, 4)]
# [1] 0.4839869 0.2467426 0.4449471 0.9119014 0.4979701 0.3266374

# Keep the matrix type
df[, -c(2, 3, 4), drop = FALSE]
#           x
# 1 0.4839869
# 2 0.2467426
# 3 0.4449471
# 4 0.9119014
# 5 0.4979701
# 6 0.3266374