2017-12-19 3 views
1

私はRstudioを使用していますが、私は以下のRコードの結果であり、この既存のデータフレームを、持っている:ワイドフォーマットの既存のデータフレームにパーセント変更値を持つ新しい行を追加するにはどうすればよいですか?

merged <- rbind(trunc(actual_2017_df), trunc(predicted_2017_df)) 
rownames(merged) <- c("2017 (A)", "2017 (P)") 
merged 

>   Jan  Feb  Mar  Apr  May  Jun  
2017 (A) 1247 1406 1760 2198 1689 2098  
2017 (P) 1259 1187 1649 2090 1682 2056 

私はこのdataframeに新しい行を追加したい、基本的に間の変化率を計算しました毎月の2017(A)と2017(P)の値。

所望の出力:

>  Jan  Feb  Mar  Apr  May  Jun  
2017 (A) 1247 1406 1760 2198 1689 2098  
2017 (P) 1259 1187 1649 2090 1682 2056 
Error  1%  -16%  -6%  -5%  0%  -2% 

'月' のため、以下のようにエラーが計算されます。 (1259年から1247年)/ 1247 * 100

は、どのように私は、この追加を含む新しいdataframeを作成することができます「エラー」行ですか?

注:最終結果を小数点以下第0位にしたい。 lapply持つ列を介して我々は、ループ(それはdata.frameであると仮定して)

答えて

2

、最初の要素とのdiff、除算を得る、round%rbind

rbind(merged, error = lapply(merged, function(x) paste0(100*round(diff(x)/x[1], 2), "%"))) 
#   Jan Feb Mar Apr May Jun 
#2017 (A) 1247 1406 1760 2198 1689 2098 
#2017 (P) 1259 1187 1649 2090 1682 2056 
#error  1% -16% -6% -5% 0% -2% 

またはそれに変換するとpastematrixdiffを取得し、最初の行で割り、pasteを上記のように

rbind(merged, error = paste0(100*round(diff(as.matrix(merged))/merged[1,], 2), "%")) 
+1

スポットに!正確に私が必要としたもの。ありがとう! – user3115933

関連する問題