37

グループ化変数 (「グループ」) の各レベル内の数値変数 (「値」) の計算(または、長さ 1のmeanその他の要約統計量)を計算したいと考えています。minmaxlengthsum

要約統計量は、元のデータと同じ長さの新しい変数に割り当てる必要があります。つまり、元のデータの各行には、現在のグループ値に対応する値が含まれている必要があります。データ セットは、グループごとに 1 行に折りたたまれてはなりません。たとえば、 group を考えてみましょう: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
4

4 に答える 4

29

You may do this in dplyr using mutate:

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(grp.mean.values = mean(value))

...or use data.table to assign the new column by reference (:=):

library(data.table)
setDT(df)[ , grp.mean.values := mean(value), by = group]
于 2016-02-23T19:40:02.693 に答える
29

機能をご覧ください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)
于 2011-05-19T10:34:19.630 に答える
7

1 つのオプションは、 を使用することplyrです。ddplya (最初の d) を期待し、a (2 番目の d data.frame) を返しますdata.frame。他の XXply 関数も同様に機能します。つまり、 a をldply期待して alistを返すdata.framedlply反対のことをする、などなど。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
于 2011-05-19T04:18:32.033 に答える
3

基本関数を使用する別のオプションaggregatemerge

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
于 2011-05-19T04:49:21.493 に答える