计算组平均值、总和或其他汇总统计数据。并将列分配给原始数据
我想计算 mean
(或任何其他长度为 1 的汇总统计数据,例如 min
、max
、length
、分组变量(“组”)每个级别内数值变量(“值”)的 sum
)。
摘要统计数据应分配给一个与原始数据相同长度的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值 - 数据集不应该折叠为每组一行。例如,考虑组 mean
:
之前
id group value
1 a 10
2 a 20
3 b 100
4 b 200
之后
id group value grp.mean.values
1 a 10 15
2 a 20 15
3 b 100 150
4 b 200 150
I want to calculate mean
(or any other summary statistics of length one, e.g. min
, max
, length
, sum
) of a numeric variable ("value") within each level of a grouping variable ("group").
The summary statistic should be assigned to a new variable which has the same length as the original data. That is, each row of the original data should have a value corresponding to the current group value - the data set should not be collapsed to one row per group. For example, consider group mean
:
Before
id group value
1 a 10
2 a 20
3 b 100
4 b 200
After
id group value grp.mean.values
1 a 10 15
2 a 20 15
3 b 100 150
4 b 200 150
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以在
dplyr
中使用mutate
执行此操作:...或使用
data.table
通过引用分配新列 (: =):
You may do this in
dplyr
usingmutate
:...or use
data.table
to assign the new column by reference (:=
):看一下
ave
函数。如果您想使用
ave
来计算每个组的其他内容,则需要指定FUN = your-desired-function
,例如FUN = min:
Have a look at the
ave
function. Something likeIf you want to use
ave
to calculate something else per group, you need to specifyFUN = your-desired-function
, e.g.FUN = min
:一种选择是使用
plyr
。ddply
需要一个data.frame
(第一个 d)并返回一个data.frame
(第二个 d)。其他 XXply 函数的工作方式类似;即ldply
需要一个list
并返回一个data.frame
,dlply
则相反......等等等等。第二个参数是分组变量。第三个参数是我们要为每个组计算的函数。One option is to use
plyr
.ddply
expects adata.frame
(the first d) and returns adata.frame
(the second d). Other XXply functions work in a similar way; i.e.ldply
expects alist
and returns adata.frame
,dlply
does the opposite...and so on and so forth. The second argument is the grouping variable(s). The third argument is the function we want to compute for each group.这是使用基本函数
aggregate
和merge
的另一个选项:您可以使用
后缀
获得“更好”的列名称:Here is another option using base functions
aggregate
andmerge
:You can get "better" column names with
suffixes
: