如何将具有百分比更改值的新行添加到宽格式的现有数据框中?

问题描述 投票:1回答: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%

对于'Jan',错误计算如下:(1259-1247)/ 1247 * 100

如何创建包含此额外“错误”行的新dataframe

注意:我希望我的最终结果在零小数位。

r dataframe
1个回答
2
投票

我们用lapply循环列(假设它是data.frame),得到diff,与第一个元素划分,roundpaste%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%

或转换为matrix,得到diff,除以第一行,paste如上

rbind(merged, error = paste0(100*round(diff(as.matrix(merged))/merged[1,], 2), "%"))
© www.soinside.com 2019 - 2024. All rights reserved.