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

Jas*_*y.W 5 r subset dataframe

我有一个数据框:

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
Run Code Online (Sandbox Code Playgroud)

我想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   
Run Code Online (Sandbox Code Playgroud)

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

    Y   X2  

    0   1   

    1   1    
    0   1     
Run Code Online (Sandbox Code Playgroud)

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

    Y    X3
    1    1
    1    1
    0    1
    0    1
Run Code Online (Sandbox Code Playgroud)

我有一个大概的了解,以使用apply(df, 2, sum)为数据框的列,但我不知道如何子集基于每个列Xi,然后计算出sumY.任何帮助表示赞赏!

M--*_*M-- 5

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

sum(df[df$X1==1,]$Y)
Run Code Online (Sandbox Code Playgroud)

这应该对你有用。


Pie*_*nte 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
Run Code Online (Sandbox Code Playgroud)

您还可以使用crossprod(x[,1],as.matrix(x[,-1]))

     X1 X2 X3
[1,]  2  2  2
Run Code Online (Sandbox Code Playgroud)