我正在使用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
?
注意:我希望我的最终结果在零小数位。
我们用lapply
循环列(假设它是data.frame
),得到diff
,与第一个元素划分,round
,paste
与%
和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), "%"))