如何使用R找到子集的均值?

时间:2017-12-07 18:00:08

标签: r csv math dataframe

在R,mtcars中使用预先安装的数据集,我试图找到" mpg"的平均值。仅适用于梅赛德斯汽车。我是R的新手并且自己学习。我用以下方法计算了所有汽车的平均油耗:

read.csv(" mtcars.csv") 平均(mtcars $ MPG)

我想过使用像GROUP BY这样的东西来组合梅赛德斯的汽车,但似乎无法弄明白。我确定它非常简单,所以我有点沮丧,我没有看到下一步该做什么......

这就是文件的样子:https://gist.github.com/seankross/a412dfbd88b3db70b74b

2 个答案:

答案 0 :(得分:2)

在基数R中,mtcars是内置数据框。您可以在控制台中键入mtcars进行查看。

在这里,我打印了mtcars数据框的前10行。

head(mtcars, 10)
#                    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
# Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
# Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
# Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    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

您需要的信息(模型)存储在行名称中。要访问该信息,我们可以使用rownames函数。

rownames(mtcars)
# [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
# [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
# [7] "Duster 360"          "Merc 240D"           "Merc 230"           
# [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
# [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
# [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
# [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
# [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
# [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
# [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
# [31] "Maserati Bora"       "Volvo 142E"

接下来我们需要做的是过滤行名称以查看是否有任何符合“Merc”的元素。我们可以使用grepl来实现此目的,如果匹配则返回逻辑向量。这里“^ Merc”表示用“Merc”中的开头捕获字符串。

grepl("^Merc", rownames(mtcars))
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
# [14]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [27] FALSE FALSE FALSE FALSE FALSE FALSE

最后,我们可以使用逻辑向量对mtcars数据帧进行子集化。在子集之后,我们可以计算子集的mpg的平均值。

mtcars_merc <- mtcars[grepl("^Merc", rownames(mtcars)), ]
mean(mtcars_merc$mpg)
# [1] 19.01429

答案 1 :(得分:0)

您也可以data.table方式执行此操作。使用此代码: -

library(data.table)

dt <- mtcars
dt <- setDT(dt, keep.rownames = T)
dt <- dt[, merc := grepl("Merc", rn)]
dt <- dt[, merc := ifelse(merc == T, 1L, 0L)]
dt <- dt[merc == 1, merc_mean := mean(mpg), by = merc]

merc_mean列将为其记录中的所有Merc汽车提供mean