【问题标题】:Column sum based on conditions基于条件的列总和
【发布时间】:2019-06-28 21:10:38
【问题描述】:

根据条件对列求和时遇到问题。在这里,对列求和意味着d23+d24+d25+d26+..+d31。以下是我的数据框的一部分。

      d23  d24  d25   d26    d27    d28    d29    d30    d31
854 -0.60 4.11 8.52  0.90  -7.99 -10.27  -8.32  -6.79 -11.71
855 -1.14 2.66 8.14  0.11  -8.96 -11.25  -9.17  -7.84 -12.53
856 -1.16 0.71 5.45 -1.65 -10.72 -11.18 -11.58 -10.44 -14.29
857  0.08 5.36 9.59 -0.22  -9.79  -9.47  -9.44  -7.67 -10.57
858 -0.95 4.86 8.18 -4.03 -12.15 -11.19 -11.37  -9.47 -13.90
859 -0.70 3.72 8.60  1.87  -6.99  -9.77  -7.84  -6.20 -11.31

如您所见,有正值和负值。我想以这种方式对列求和,如果值为正,则将其设置为零;如果值为负,则取该值的绝对值。最后,对各列求和并创建一个新列。

知道我怎么能意识到这一点吗?

【问题讨论】:

    标签: r column-sum


    【解决方案1】:

    一种可能是:

    colSums(abs(df) * (df < 0))
    
      d23   d24   d25   d26   d27   d28   d29   d30   d31 
     4.55  0.00  0.00  5.90 56.60 63.13 57.72 48.41 74.31 
    

    【讨论】:

    • 这看起来像是行总和而不是列总和。我编辑了我的问题以使其更清楚。
    • 您可以将culSums() 替换为rowSums()rowSums(abs(df) * (df &lt; 0))
    • 我可以在其他情况下使用它吗?比如说,如果该值大于 5,则将该值设置为原始值减 5。否则,将该值设置为零。然后跨列求和。
    • 当然,你可以使用rowSums(((df &gt; 5) * df - 5) * (df &gt; 5))之类的东西。
    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 2021-11-05
    • 2016-05-31
    • 1970-01-01
    • 2013-03-09
    • 2022-01-07
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多