数据框所有行的平均列值
我有一个从这样的文件中读取的数据框:
name, points, wins, losses, margin
joe, 1, 1, 0, 1
bill, 2, 3, 0, 4
joe, 5, 2, 5, -2
cindy, 10, 2, 3, -2.5
等等。
我想平均该数据所有行的列值,有没有一种简单的方法可以在 R 中做到这一点?
例如,我想获取所有“Joe's”的平均列值,得出类似的结果
joe, 3, 1.5, 2.5, -.5
I've got a data frame that I read from a file like this:
name, points, wins, losses, margin
joe, 1, 1, 0, 1
bill, 2, 3, 0, 4
joe, 5, 2, 5, -2
cindy, 10, 2, 3, -2.5
etc.
I want to average out the column values across all rows of this data, is there an easy way to do this in R?
For example, I want to get the average column values for all "Joe's", coming out with something like
joe, 3, 1.5, 2.5, -.5
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
加载数据后:
只需使用
aggregate
函数:After loading your data:
Just use the
aggregate
function:强制性的
plyr
和reshape
解决方案:Obligatory
plyr
andreshape
solutions:以及一个 data.table 解决方案,可实现简单的语法和内存效率
And a data.table solution for easy syntax and memory efficiency
我还有一个办法。
我在其他例子中展示了它。
如果我们的矩阵
xt
为:abc d
A 1 2 3 4
A 5 6 7 8
A 9 10 11 12
A 13 14 15 16
B 17 18 19 20
B 21 22 23 24
B 25 26 27 28
B 29 30 31 32
C 33 34 35 36
C 37 38 39 40
C 41 42 43 44
C 45 46 47 48
只需几个步骤即可计算重复列的平均值:
1. 使用聚合函数计算平均值
2. 进行两项修改:聚合将 rownames 写入新的(第一)列,因此您必须将其重新定义为 rownames...
3....并通过选择列 2:xa 对象的列数来删除此列。
之后我们得到:
abc d
A 7 8 9 10
B 23 24 25 26
中 39 40 41 42
I have yet another way.
I show it on other example.
If we have matrix
xt
as:a b c d
A 1 2 3 4
A 5 6 7 8
A 9 10 11 12
A 13 14 15 16
B 17 18 19 20
B 21 22 23 24
B 25 26 27 28
B 29 30 31 32
C 33 34 35 36
C 37 38 39 40
C 41 42 43 44
C 45 46 47 48
One can compute mean for duplicated columns in few steps:
1. Compute mean using aggregate function
2. Make two modifications: aggregate writes rownames as new (first) column so you have to define it back as a rownames...
3.... and remove this column, by selecting columns 2:number of columns of xa object.
After that we get:
a b c d
A 7 8 9 10
B 23 24 25 26
C 39 40 41 42
您可以简单地使用
tidyverse
中的函数按名称对数据进行分组,然后通过给定函数(例如平均值)汇总所有剩余的列:You can simply use functions from the
tidyverse
to group your data by name, and then summarise all remaining columns by a given function (eg. mean):