选择mtcars数据集以名称开头,字母为" M"

时间:2017-08-24 18:37:42

标签: r dataset extract

我尝试从R中的mtcars数据集中提取数据,特别是那些名称以' M'开头的汽车,但是汽车的名称不是变量,所以我做不了类似的事情

Subset <- mtcars[grep("M", mtcars$name), ]

有人知道如何解决这个问题吗? 谢谢

3 个答案:

答案 0 :(得分:5)

@Pumpkin C - 不确定,为什么这会得到负面投票。 rownames数据集中的汽车名称为mtcars。以下将产生所需的输出:

> mtcars[grep('^M', rownames(mtcars)),]

               mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Merc 240D     24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230      22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280      19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C     17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE    16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL    17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC   15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Maserati Bora 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

答案 1 :(得分:1)

@ Sagar的回答很简洁。我只是在这里添加它,以防tidyverse方法更受欢迎。

suppressPackageStartupMessages(library(tidyverse))
library(stringr)

mtcars %>%
  rownames_to_column() %>%
  filter(str_detect(rowname, "^M"))

#>          rowname  mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> 1      Mazda RX4 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> 2  Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> 3      Merc 240D 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#> 4       Merc 230 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#> 5       Merc 280 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#> 6      Merc 280C 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
#> 7     Merc 450SE 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#> 8     Merc 450SL 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#> 9    Merc 450SLC 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#> 10 Maserati Bora 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

答案 2 :(得分:1)

通过加入data.table解决方案,增加了Sagar的答案并标记了整齐的方法。

library(data.table)
dat <- data.table(mtcars, keep.rownames = TRUE)
dat[rn %like% "^M"]
#                rn  mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#  1:     Mazda RX4 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#  2: Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#  3:     Merc 240D 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#  4:      Merc 230 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#  5:      Merc 280 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#  6:     Merc 280C 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
#  7:    Merc 450SE 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#  8:    Merc 450SL 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#  9:   Merc 450SLC 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
# 10: Maserati Bora 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8