对data.frame(R)中的多个子集执行操作

时间:2016-04-03 19:33:01

标签: r

给出以下样本数据集:

    df<-data.frame(year=c("1990","1990","1990","1991","1991","1991","1992","1992","1992"), C2=LETTERS[1:3], C3=rnorm(1:9)) 
    df
      year C2           C3
    1 1990  A -0.973627230
    2 1990  B -0.755867016
    3 1990  C  0.016505689
    4 1991  A -0.004353502
    5 1991  B  0.525895816
    6 1991  C -0.882487930
    7 1992  A -0.206509950
    8 1992  B  0.192527583
    9 1992  C  0.935712021

我是否可以针对year的每个唯一值执行以下操作:

C3C2 == B时添加C2 == C的值,然后在C3时除以C2==A的值?

因此,对于每个year,我都会获得(B+C)/A

的值

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用 data.table 。只需在解释时完全编写代码。

library(data.table)
setDT(df)[, sum(C3[C2 %in% c("B", "C")]) / C3[C2 == "A"], by = year]
#    year          V1
# 1: 1990 -0.08157762
# 2: 1991  4.44625385
# 3: 1992 13.03606921

如果 dplyr 是你的包,那么这里是在 dplyr 中完成的:

library(dplyr)
group_by(df, year) %>%
    summarise(out = sum(C3[C2 %in% c("B", "C")]) / C3[C2 == "A"])