我想要计算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)
| 归档时间: |
|
| 查看次数: |
15220 次 |
| 最近记录: |