0

Code2 つの列 (および)を持つ次の data.frame がある場合Value:

Code  Value
A111  5
B111  10
C111  15
A222  20
B222  25
C222  30

そして、私は次のグループを持っています:

グループ 1 = A で始まるすべてのコード

グループ 2 = B と C で始まるすべてのコード

私は計算したい:

  • Valueグループ 1の合計。
  • Valueグループ 2の合計。
  • 属するグループValueの合計に対するそれぞれの重みを持つベクトル。つまり、A111 の場合は .2 (5 をグループ 1 の合計値 (25) で割る) になります。Value
4

1 に答える 1

2

データを取得します。

test <- data.frame(Code = c("A111", "B111", "C111", "D111", "E111", "A222", "B222", "C222", "D222", "E222" ),
Value = c(5L, 10L, 15L, 20L, 25L, 30L, 35L, 45L, 55L, 60L),stringsAsFactors=FALSE)

最初の文字 ( fl)を使用して、コードのグループ化変数を作成します。

fl <- substr(test$Code,1,1)
groups <- ifelse(fl %in% c("A","B"), 1,
          ifelse(fl %in% c("C","D"), 2, 
          3))

各グループ内のを使用して重みをave計算します。sum

test$Weight <- test$Value / ave(test$Value,groups,FUN=sum)
test

   Code Value    Weight
1  A111     5 0.0625000
2  B111    10 0.1250000
3  C111    15 0.1111111
4  D111    20 0.1481481
5  E111    25 0.2941176
6  A222    30 0.3750000
7  B222    35 0.4375000
8  C222    45 0.3333333
9  D222    55 0.4074074
10 E222    60 0.7058824
于 2013-06-25T04:04:08.047 に答える