我想要计算mean
(或任何其他摘要长度之一,例如统计min
,max
,length
,sum
)的数值变量("值")的分组变量("基团")的每个水平内.
摘要统计应该被分配到具有一个新的变量相同的长度为原始数据.即,原始数据中的每一行应该具有对应于当前组值的值-该数据组应该不被折叠,以便每组中的一行.例如,考虑组mean
:
之前
id group value
1 a 10
2 a 20
3 b 100
4 b 200
Run Code Online (Sandbox Code Playgroud)
后
id group value grp.mean.values
1 a 10 15
2 a 20 15
3 b 100 150
4 b 200 150
Run Code Online (Sandbox Code Playgroud)
Hen*_*ico 20
看看这个ave
功能.就像是
df$grp.mean.values <- ave(df$value, df$group)
Run Code Online (Sandbox Code Playgroud)
如果要用于ave
计算每个组的其他内容,则需要指定FUN = your-desired-function
,例如FUN = min
:
df$grp.min <- ave(df$value, df$group, FUN = min)
Run Code Online (Sandbox Code Playgroud)
Hen*_*rik 19
你可以这样做dplyr
使用mutate
:
library(dplyr)
df %>%
group_by(group) %>%
mutate(grp.mean.values = mean(value))
Run Code Online (Sandbox Code Playgroud)
...或者用于data.table
通过引用(:=
)分配新列:
library(data.table)
setDT(df)[ , grp.mean.values := mean(value), by = group]
Run Code Online (Sandbox Code Playgroud)
一种选择是使用plyr
.ddply
期望a data.frame
(第一个d)并返回a data.frame
(第二个d).其他XXply函数以类似的方式工作; 即ldply
期望a list
并返回a data.frame
,dlply
反之亦然......依此类推.第二个参数是分组变量.第三个参数是我们想要为每个组计算的函数.
require(plyr)
ddply(dat, "group", transform, grp.mean.values = mean(value))
id group value grp.mean.values
1 1 a 10 15
2 2 a 20 15
3 3 b 100 150
4 4 b 200 150
Run Code Online (Sandbox Code Playgroud)