向显示幅度的数据帧添加一行(最大值为正值或负值之和)

时间:2017-08-18 21:47:03

标签: r dataframe sum amplitude absolute-value

我想在数据帧中插入最后一行,该数据帧将显示正值之和或每列负值之和,无论哪个总和具有最大幅度。

最终表格如下所示,最后一行(“MaxAmplitude”)是我想要获得的结果:

  c("A", "B", "C", "Max Amplitude")  X1  X2  X3  X4  X5
1                                 A -30  10  10  -2   8
2                                 B   5  50 100 -10 -10
3                                 C -10 -30   1  -1   3
4                     Max Amplitude -40  60 111 -13  11

我的想法是一个多步骤的方法,我会连续添加几行:

  • 第一行作出正值之和
  • 第二行构成负值的总和
  • 通过比较两个总和的绝对值来测试第1行或第2行中具有最大幅度的第3行。

我的问题是我不想在数据帧中添加那么多行。 此外,我不知道如何在负值的总和具有最大幅度的情况下显示负号,如果我比较绝对值,我将丢失此信息。

有人会对我如何编码这个问题有任何解决方案吗? 非常感谢你的帮助!

df <- cbind(c("A","B","C"),data.frame(matrix(c(-30,5,-10,
                                                       10,50,-40,
                                                       10,100,1,
                                                       -2,-10,-1,
                                                       8,-10,3
                                                       ), nrow = 3, ncol = 5)))

1 个答案:

答案 0 :(得分:2)

这是你想要的吗?此外,apply还会返回matrix而不是data.frame

apply(df[,2:6],2,function(x) sum(x[which((x>0)==(sum(x)>0))]))


 X1  X2  X3  X4  X5 
-40  60 111 -13  11 

只需df[nrow(df)+1,]=c('Max Amplitude',c(apply(df[,2:6],2,function(x) sum(x[which((x>0)==(sum(x)>0))]))))

> df
  c("A", "B", "C")  X1  X2  X3  X4  X5
1                A -30  10  10  -2   8
2                B   5  50 100 -10 -10
3                C -10 -40   1  -1   3
4    Max Amplitude -40  60 111 -13  11