基于指标的条件总和

时间:2013-03-20 16:32:02

标签: r sum data-manipulation

我有一个这样的数据框:

   A   B   Ind
1 10   8     1
2  9  10     2
3  7   1     2
4 19  20     1
5  .   .     .

如何根据Ind值对列进行求和?如果Ind==1,则来自A列,如果Ind==2,则来自列B的总和。例如,前4行的输出应为10+10+1+19=30,其中前10位在A,第10位在B,第3位在B,第四十九章在A

3 个答案:

答案 0 :(得分:6)

使用I

的另一个选项
 sum(with(dat,A*I(Ind==1)+B*(Ind==2)))

答案 1 :(得分:4)

假设您的data.frame被称为“mydf”,您可以使用ifelse,如下所示:

sum(with(mydf, ifelse(Ind == 1, A, B)))

以下是ifelse部分的结果:

> with(mydf, ifelse(Ind == 1, A, B))
[1] 10 10  1 19

当然,如果你有多个条件,你可以根据需要嵌套它们。


这是一个使用基本子集的更详细的替代方法:

sum(with(mydf, c(mydf[Ind == 1, "A"], mydf[Ind == 2, "B"])))

答案 2 :(得分:0)

使用which的解决方案:

sum( df$A[which(df$Ind==1)] , df$B[which(df$Ind==2)] )