我有一个数据框:
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
列中的所有行求和。例如,对于列X1
,s1 = 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}}感谢任何帮助!
答案 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