我有一个这样的数据框:
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)] )