在R,mtcars中使用预先安装的数据集,我试图找到" mpg"的平均值。仅适用于梅赛德斯汽车。我是R的新手并且自己学习。我用以下方法计算了所有汽车的平均油耗:
read.csv(" mtcars.csv") 平均(mtcars $ MPG)
我想过使用像GROUP BY这样的东西来组合梅赛德斯的汽车,但似乎无法弄明白。我确定它非常简单,所以我有点沮丧,我没有看到下一步该做什么......
这就是文件的样子:https://gist.github.com/seankross/a412dfbd88b3db70b74b
答案 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
。