R 基于另一列中的值对数据集中的一列求平均值

R 基于另一列中的值对数据集中的一列求平均值,r,dataframe,average,R,Dataframe,Average,我有一个许多不同型号的车队的数据框架。每辆车都是一行,包括每辆特定车辆的品牌、型号和平均每日里程。我想通过模型得到平均每日里程数。我该怎么做?实际的表有许多不同的模型和品牌,我不想把它们分成单独的数据帧。我相信我可以用R中的一个命令完成。提前感谢您的帮助 下面是数据帧的一个子集 每天制作一个模型 现代口音43 现代口音37 现代创世纪32 现代创世纪63 本田雅阁24 本田雅阁54 本田思域71 本田思域16 丰田凯美瑞61 丰田凯美瑞27 丰田凯美瑞12假设您的数据如下: "","make",

我有一个许多不同型号的车队的数据框架。每辆车都是一行,包括每辆特定车辆的品牌、型号和平均每日里程。我想通过模型得到平均每日里程数。我该怎么做?实际的表有许多不同的模型和品牌,我不想把它们分成单独的数据帧。我相信我可以用R中的一个命令完成。提前感谢您的帮助

下面是数据帧的一个子集 每天制作一个模型 现代口音43 现代口音37 现代创世纪32 现代创世纪63 本田雅阁24 本田雅阁54 本田思域71 本田思域16 丰田凯美瑞61 丰田凯美瑞27
丰田凯美瑞12

假设您的数据如下:

"","make","model","mi_per_day"
"1","Hyundai ","Accent",43
"2","Hyundai ","Genesis",32
"3","Hyundai ","Genesis",63
"4","Honda","Accord",24
"5","Honda","Accord",54
"6","Honda","Civic",71
"7","Honda","Civic",16
"8","Toyota","Camry",61
"9","Toyota","Camry",27
"10","Toyota","Camry",12
您可以使用以下代码:

read.csv("/path/to/csv/dir/cars.csv")
aggregate(x = cars$mi_per_day,by=list(cars$make),FUN=mean)
这将提供以下输出:

Group.1        x
1  Accent 43.00000
2  Accord 39.00000
3   Camry 33.33333
4   Civic 43.50000
5 Genesis 47.50000
这类问题(需要通过分组变量计算某些内容)在StackOverflow上经常被问到。我决定展示几种获得(几乎)相同结果的不同方法

资料 首先,我生成了一些简单的数据:

set.seed(123)

dat <- data.frame(group = sample(c('a','b','c'), 100, T),
                  value = rnorm(100),
                  stringsAsFactors = FALSE)
head(dat) 

#   group       value
# 1     a  0.25331851
# 2     c -0.02854676
# 3     b -0.04287046
# 4     c  1.36860228
# 5     c -0.22577099
# 6     a  1.51647060
要使用
aggregate
函数,我们可以使用公式语法,并为其提供我们的数据和我们想要的函数。我非常喜欢聚合

aggregate(value ~ group, data = dat, mean)

#   group       value
# 1     a  0.05444944
# 2     b -0.16894993
# 3     c -0.04324673
我们可以使用
split
lapply
首先通过分组变量分离数据,然后对分离的列表执行计算。我们使用
stack
以表格形式显示结果

stack(by(dat, dat$group, function(d) mean(d$value)))

#        values ind
# 1  0.05444944   a
# 2 -0.16894993   b
# 3 -0.04324673   c
stack(lapply(split(dat, dat$group), function(d) mean(d$value)))

#        values ind
# 1  0.05444944   a
# 2 -0.16894993   b
# 3 -0.04324673   c
stack(tapply(dat$value, dat$group, mean))

#        values ind
# 1  0.05444944   a
# 2 -0.16894993   b
# 3 -0.04324673   c
我们可以使用
tapply
函数在不规则数组上应用函数。我们给它我们想要用于计算的变量,分组变量和函数。我们使用
stack
以表格形式显示结果

stack(by(dat, dat$group, function(d) mean(d$value)))

#        values ind
# 1  0.05444944   a
# 2 -0.16894993   b
# 3 -0.04324673   c
stack(lapply(split(dat, dat$group), function(d) mean(d$value)))

#        values ind
# 1  0.05444944   a
# 2 -0.16894993   b
# 3 -0.04324673   c
stack(tapply(dat$value, dat$group, mean))

#        values ind
# 1  0.05444944   a
# 2 -0.16894993   b
# 3 -0.04324673   c
我们也可以使用优秀的
dplyr
包来执行聚合。我们首先使用
groupby
对数据进行分组,然后使用
summary
应用我们的函数。
%%>%%
符号是管道,它们非常有用

library(dplyr)
dat %>%
  group_by(group) %>%
  summarise(mean(value))

#   group `mean(value)`
#   <chr>         <dbl>
# 1     a    0.05444944
# 2     b   -0.16894993
# 3     c   -0.04324673

您好,您能提供一些示例数据或可复制的示例吗?该函数可能有用Bouncyball和hhh感谢您的重复和Bouncyball您的答案非常棒