我尝试从R中的mtcars数据集中提取数据,特别是那些名称以' M'开头的汽车,但是汽车的名称不是变量,所以我做不了类似的事情
Subset <- mtcars[grep("M", mtcars$name), ]
有人知道如何解决这个问题吗? 谢谢
答案 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