根据另一列计算一个列的总和

问题描述 投票:4回答:3

我有一个数据框:

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来对每一列进行子集化,然后计算sumY.。对您有所帮助!

r dataframe subset
3个回答
4
投票

您可以使用colSums并在Y * X等于1时计数。我认为X2列的期望输出中有错误。第2行和第5行的Y和X2包含1。总和应为2。

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]))

     X1 X2 X3
[1,]  2  2  2

4
投票

有很多方法可以做到这一点。一种是根据所需的列获取子集:

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

这应该为您工作。


2
投票

这里还有另一种方法,您可以修改以求和与1、0或其他某个值相对应的元素。]

sapply(x[,-1], function(a) sum(x$Y[a == 1]))
#X1 X2 X3 
# 2  2  2 
© www.soinside.com 2019 - 2024. All rights reserved.