r:如何根据数据框中的另一列计算一列的总和

时间:2017-03-27 21:11:41

标签: r dataframe subset

我有一个数据框:

Y  X1  X2  X3
1   1   0  1
1   0   1  1
0   1   0  1
0   0   0  1
1   1   1  0
0   1   1  0

我希望根据等于Y的其他列(1)对sum(Y=1|Xi =1列中的所有行求和。例如,对于列X1s1 = sum(Y=1|Xi =1) =1 + 0 +1+0 =2

Y  X1   
1   1   

0   1    

1   1    
0   1   

对于X2列,s2 = sum(Y=1|Xi =1) = 0 +1+0 =1

    Y   X2  

    0   1   

    1   1    
    0   1     

对于X3列,s3 = sum(Y=1|Xi =1) = 1+1 +0+0 =2

    Y    X3
    1    1
    1    1
    0    1
    0    1

我粗略地想使用apply(df, 2, sum)作为数据框的列,但我不知道如何根据Xi对每列进行分组,然后计算sum的{ {1}}感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

您可以使用f(n)并在Y * X等于1时进行计数。我认为X2列的所需输出中存在错误。第2行和第5行包含Y和X2的1。总和应为2。

colSums

您也可以使用x=read.table(text="Y X1 X2 X3 1 1 0 1 1 0 1 1 0 1 0 1 0 0 0 1 1 1 1 0 0 1 1 0",header=TRUE, stringsAsFactors=FALSE) colSums(x[,-1]*x[,1]) X1 X2 X3 2 2 2

crossprod(x[,1],as.matrix(x[,-1]))

答案 1 :(得分:4)

有很多方法可以做到这一点。一个是根据您想要的列获取子集:

sum(df[df$X1==1,]$Y)

这应该适合你。

答案 2 :(得分:2)

这是另一种方法,您可以修改该方法以对与1,0相对应的元素求和。

sapply(x[,-1], function(a) sum(x$Y[a == 1]))
#X1 X2 X3 
# 2  2  2