2017-08-18 12 views
0

最後の行をデータフレームに挿入して、正の値の合計またはいずれかの合計が最大振幅を有する列ごとに負の値。振幅を示すデータフレームに行を追加する(正または負の値の合計の最大値)

ファイナルテーブルには、最後の行(「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行目TESをやっ
  • 第三行行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))) 

答えて

2

これは必要なものですか?また、温首相は、これは私は認めなければならないが、私は完全にコードが正しい結果を得た方法を理解していなかった望んでいたまさにです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 
+0

感謝を返すapply 。特に、私はその背後にある論理を理解していません。 sum(x [(x> 0)==(sum(x)> 0))])。 – user8453031

+0

@ Had57は、正(正)がマイナスよりも大きいことを意味するsum(x)> 0です。あなたの説明に基づいて、正の数を選択して合計してください。 – Wen

関連する問題