のmean
(または長さ1の他の要約統計量、たとえばmin
、max
、length
、sum
)を計算したいグループ化変数(「グループ」)の各レベル内の数値変数(「値」)。
要約統計量は、元のデータと同じ長さを持つ新しい変数に割り当てる必要があります。つまり、元のデータの各行には、現在のグループ値に対応する値が必要です。データセットは not グループごとに1行に折りたたまれている必要があります。たとえば、グループ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
これは、dplyr
でmutate
を使用して行うことができます。
library(dplyr)
df %>%
group_by(group) %>%
mutate(grp.mean.values = mean(value))
...またはdata.table
を使用して、参照によって新しい列を割り当てます(:=
):
library(data.table)
setDT(df)[ , grp.mean.values := mean(value), by = group]
ave
関数を見てください。何かのようなもの
df$grp.mean.values <- ave(df$value, df$group)
ave
を使用してグループごとに他の何かを計算する場合は、FUN = your-desired-function
を指定する必要があります。 FUN = min
:
df$grp.min <- ave(df$value, df$group, FUN = min)
1つのオプションは、plyr
を使用することです。 ddply
はdata.frame
(最初のd)を期待し、data.frame
(2番目のd)を返します。他のXXply関数も同様に機能します。つまり、ldply
はlist
を予期し、data.frame
を返し、dlply
はその逆を行います...など。 2番目の引数は、グループ化変数です。 3番目の引数は、グループごとに計算する関数です。
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
基本関数aggregate
およびmerge
を使用する別のオプションを次に示します。
merge(x, aggregate(value ~ group, data = x, mean),
by = "group", suffixes = c("", "mean"))
group id value.x value.y
1 a 1 10 15
2 a 2 20 15
3 b 3 100 150
4 b 4 200 150
suffixes
で「より良い」列名を取得できます。
merge(x, aggregate(value ~ group, data = x, mean),
by = "group", suffixes = c("", ".mean"))
group id value value.mean
1 a 1 10 15
2 a 2 20 15
3 b 3 100 150
4 b 4 200 150