3

我有一个这样的数据框:

   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,第三个 1 在B,第四个 19 在A

4

3 回答 3

6

另一种选择使用I

 sum(with(dat,A*I(Ind==1)+B*(Ind==2)))
于 2013-03-20T16:45:12.620 回答
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"])))
于 2013-03-20T16:36:26.163 回答
0

使用的解决方案which

sum( df$A[which(df$Ind==1)] , df$B[which(df$Ind==2)] )
于 2016-06-12T22:24:52.053 回答