【问题标题】:Calculate sum of one column based on another column根据另一列计算一列的总和
【发布时间】:2017-08-20 18:14:54
【问题描述】:

我有一个数据框:

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

我想根据等于1(即sum(Y=1|Xi =1)的其他列对Y 列中的所有行求和。例如,对于列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 对每一列进行子集化,然后计算Y.sum 任何帮助表示赞赏!

【问题讨论】:

  • 您是否可以按列手动执行此操作,还是希望为一大堆列自动执行此操作?
  • 我希望它为一大堆列完成
  • 仅供参考,您下次可能想dput您的数据,以便您的回答者更容易重现。一些指导:stackoverflow.com/questions/5963269/…

标签: r dataframe subset


【解决方案1】:

您可以使用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

【讨论】:

  • x[,1] %*% as.matrix(x[,-1])
【解决方案2】:

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

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

这应该适合你。

【讨论】:

    【解决方案3】:

    这里还有一种方法,您可以修改它来对对应于 1、0 或其他值的元素求和。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 2019-07-23
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多