0

如果我有以下具有 2 列(CodeValue)的 data.frame:

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

我有以下组:

第 1 组 = 所有以 A 开头的代码

第 2 组 = 所有以 B 和 C 开头的代码

我想计算:

  • 第 1 组的总和Value
  • 第 2 组的总和Value
  • 一个向量,其中每个的权重Value相对于它所属的组的总数Value,即,对于 A111,它将是 0.2(5 除以第 1 组的总值,即 25)。
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 回答