向显示振幅的数据框添加一行(正值或负值之和的最大值)
Add a row to a dataframe showing amplitude (max of the sum of the positive or the negative values)
我想将最后一行插入数据框,以显示每列正值之和或负值之和,以振幅最大的那个为准。
最后的 table 看起来像这样,最后一行 ("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 行通过比较两个总和的绝对值来测试第 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)))
这是你想要的吗?此外,apply
return 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
我想将最后一行插入数据框,以显示每列正值之和或负值之和,以振幅最大的那个为准。
最后的 table 看起来像这样,最后一行 ("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 行通过比较两个总和的绝对值来测试第 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)))
这是你想要的吗?此外,apply
return 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