我有一个这样的数据框:
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。
我有一个这样的数据框:
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。
另一种选择使用I
sum(with(dat,A*I(Ind==1)+B*(Ind==2)))
假设您的 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"])))
使用的解决方案which:
sum( df$A[which(df$Ind==1)] , df$B[which(df$Ind==2)] )