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