2017-08-24 65 views
0

我嘗試從R中的mtcars數據集提取數據,特別是那些名稱以'M'開頭的車,但是車的名稱不是變量,所以我不能做到像選擇mtcars數據集,以字母「M」開頭的名稱

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

一些東西有沒有人知道如何解決這個問題? 謝謝

+0

你可以用'rownames(mtcars)得到的名字' – G5W

回答

4

@Pumpkin C - 不確定,爲什麼這會得到負面投票。汽車名稱爲mtcars數據集中的rownames。以下將產生所需的輸出:

> 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 
+0

太謝謝你了。一個問題,也許太簡單了,你是怎麼知道這些汽車名稱在mtcars中被稱爲'rownames'的,因爲如果我打印mtcars或使用名稱(mtcars),它會讓我從mpg,cyl開始... ...所以我有點困惑我得到'rownames' –

+0

'print(mtcars)'會顯示整個數據集及其「rownames」。 'name(mtcars)'只會顯示'列'名稱(原因是你沒有看到車名)。正如@ G5W在評論中所建議的那樣,「rownames(mtcars)」顯示了數據幀 – Sagar

+0

的「rownames」。謝謝! –

1

@薩加爾的答案很好,簡潔。我只是在這裏添加這個,以便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 
+0

謝謝!....... –

1

添加到薩格爾的答案,markdly是由包括data.table解決tidyverse方法。

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 
+0

這很酷!這個data.table有點像python中的熊貓嗎? –

相關問題