数据帧中每个组的平均值

数据帧中每个组的平均值

我有一个data.frame我需要计算每个组的平均值(即Month(见下文)。


Name     Month  Rate1     Rate2

Aira       1      12        23

Aira       2      18        73

Aira       3      19        45

Ben        1      53        19

Ben        2      22        87

Ben        3      19        45

Cat        1      22        87

Cat        2      67        43

Cat        3      45        32

我想要的输出如下所示,其中Rate1和Rate2是团体的手段。请不要理会它的价值,我已经为这个例子编造了它。


Name       Rate1       Rate2

Aira        23.21       12.2

Ben         45.23       43.9

Cat         33.22       32.2


动漫人物
浏览 821回答 4
4回答

汪汪一只猫

这种类型的操作就是aggregate目的是:d&nbsp;<-&nbsp;read.table(text='Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Month&nbsp;&nbsp;Rate1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rate2 Aira&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23 Aira&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;73 Aira&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;45 Ben&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19 Ben&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;87 Ben&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;45 Cat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;87 Cat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;43 Cat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32',&nbsp;header=TRUE)aggregate(d[,&nbsp;3:4],&nbsp;list(d$Name),&nbsp;mean) &nbsp;&nbsp;Group.1&nbsp;&nbsp;&nbsp;&nbsp;Rate1&nbsp;&nbsp;&nbsp;&nbsp;Rate21&nbsp;&nbsp;&nbsp;&nbsp;Aira&nbsp;16.33333&nbsp;47.000002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ben&nbsp;31.33333&nbsp;50.333333&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cat&nbsp;44.66667&nbsp;54.00000在这里,我们聚合数据的第3列和第4列。d,按d$Name,并应用mean功能。或者,使用公式接口:aggregate(.&nbsp;~&nbsp;Name,&nbsp;d[-2],&nbsp;mean)

Qyouu

或使用group_by & summarise_at从dplyr一揽子:library(dplyr)d %>%   group_by(Name) %>%   summarise_at(vars(-Month), funs(mean(., na.rm=TRUE)))# A tibble: 3 x 3   Name  Rate1 Rate2  <fct> <dbl> <dbl>1 Aira   16.3  47.02 Ben    31.3  50.33 Cat    44.7  54.0看见?summarise_at用于指定要操作的变量的许多方法。这里,vars(-Month)所有变量除 Month.

12345678_0001

第三个很好的选择是使用这个包。data.table,它也具有类data.framework,但是像您正在寻找的操作计算速度要快得多。library(data.table)mydt&nbsp;<-&nbsp;structure(list(Name&nbsp;=&nbsp;c("Aira",&nbsp;"Aira",&nbsp;"Aira",&nbsp;"Ben",&nbsp;"Ben",&nbsp;"Ben",&nbsp;"Cat",&nbsp;"Cat",&nbsp;"Cat"),&nbsp;Month&nbsp;= &nbsp;c(1L,&nbsp;2L,&nbsp;3L,&nbsp;1L,&nbsp;2L,&nbsp;3L,&nbsp;1L,&nbsp;2L,&nbsp;3L),&nbsp;Rate1&nbsp;=&nbsp;c(15.6396600443877,&nbsp;2.15649279424609,&nbsp;6.24692918928743,&nbsp;2.37658797276116,&nbsp;34.7500663272292, &nbsp;&nbsp;3.28750138697048,&nbsp;29.3265553981065,&nbsp;17.9821839334431,&nbsp;10.8639802575958),&nbsp;Rate2&nbsp;=&nbsp;c(17.1680489538369,&nbsp;5.84231656330206,&nbsp;8.54330866437461,&nbsp;5 &nbsp;&nbsp;.88415184986176,&nbsp;3.02064294862551,&nbsp;17.2053351400752,&nbsp;16.9552950199166,&nbsp;2.56058000170089,&nbsp;15.7496228048122)),&nbsp;.Names&nbsp;=&nbsp;c("Name",&nbsp;"Month", &nbsp;&nbsp;&nbsp;"Rate1",&nbsp;"Rate2"),&nbsp;row.names&nbsp;=&nbsp;c(NA,&nbsp;-9L),&nbsp;class&nbsp;=&nbsp;c("data.table",&nbsp;"data.frame"))现在取所有3个月的比率1和比率2的平均值,对于每个人(姓名):首先,决定你想取哪个列的平均值。colstoavg&nbsp;<-&nbsp;names(mydt)[3:4]现在我们使用lapplication对我们想要的列取平均值(Colstoavg)。mydt.mean&nbsp;<-&nbsp;mydt[,lapply(.SD,mean,na.rm=TRUE),by=Name,.SDcols=colstoavg] &nbsp;mydt.mean &nbsp;&nbsp;&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rate1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rate21:&nbsp;Aira&nbsp;&nbsp;8.014361&nbsp;10.5178912:&nbsp;&nbsp;Ben&nbsp;13.471385&nbsp;&nbsp;8.7033773:&nbsp;&nbsp;Cat&nbsp;19.390907&nbsp;11.755166
打开App,查看更多内容
随时随地看视频慕课网APP