向显示幅度的数据帧添加一行(正值或负值之和的最大值)
Posted
技术标签:
【中文标题】向显示幅度的数据帧添加一行(正值或负值之和的最大值)【英文标题】:Add a row to a dataframe showing amplitude (max of the sum of the positive or the negative values) 【发布时间】:2017-08-18 21:47:03 【问题描述】:我想在数据框中插入最后一行,以显示每列正值的总和或负值的总和,以幅度最大的总和为准。
最终表格看起来像这样,最后一行(“MaxAmplitude”)是我想要获得的结果:
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 -30 1 -1 3 4 最大振幅 -40 60 111 -13 11我的想法是一个多步骤的方法,我会连续添加几行:
第一行得出正值的总和 第二行求负值之和 第 3 行通过比较两个和的绝对值来测试第 1 行或第 2 行中幅度最大的一个。我的问题是我不想在数据框中添加那么多行。 此外,如果负值的总和具有最大幅度,我不知道如何显示负号(如果我比较绝对值,我会丢失此信息)。
请问有人对我如何编码有任何解决方案吗? 非常感谢您的帮助!
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】:这是你想要的吗?另外,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
【讨论】:
非常感谢 Wen,这正是我想要的,尽管我必须承认我没有完全理解代码是如何得到正确结果的。特别是,我不确定是否理解背后的逻辑: sum(x[which((x>0)==(sum(x)>0))])。 @Had57 is sum(x)>0 这意味着 positive 大于negative ,那么根据您的解释,您应该选择正数并将它们相加,清楚吗?以上是关于向显示幅度的数据帧添加一行(正值或负值之和的最大值)的主要内容,如果未能解决你的问题,请参考以下文章
geom_bar ggplot2 具有正值和负值的堆叠、分组条形图 - 金字塔图
R语言ggplot2可视化发散棒棒糖图发散棒棒糖图可以同时处理负值和正值并按照大小排序区分数据在棒棒糖图的数据点钟添加数值标签(Diverging Lollipop Chart )
Python使用matplotlib可视化发散型点图发散型点图可以同时处理负值和正值并按照大小排序区分数据为发散型点图添加数值标签(Diverging Dot Plot )
Android 开源项目MPChart柱状图显示负值的时候,是倒着显示,怎么让它像正值一样正常显示。
R语言ggplot2可视化发散型点图发散型点图可以同时处理负值和正值并按照大小排序区分数据为发散型点图添加数值标签(Diverging Dot Plot )