繁体   English   中英

如何在R中的数据框中找到2行值之间的百分比差异

[英]How to find the % difference between values on 2 rows in a data frame in R

我想找到当前值和前一个值之间的差异,并将表格显示为它们之间的百分比差异。

查找连续两行之间差异的代码是:

abcfin <- abcfin %>% mutate_if(is.numeric, list( ~ . - lag(.)))

我用来获得结果的代码是:

asdfg <- abcfin %>% mutate_if(is.numeric, list(ifelse(lag(.)!=0,(. - lag(.))*100/ lag(.)), 0))

但是,我收到以下错误:

-.Date错误(左,右):只能从“Date”对象中减去另外:警告消息:在矩阵中(if(is.null(value))逻辑()else value,nrow = nr,dimnames = list (rn, : 数据长度 [5974] 不是行数 [543] 的约数或倍数

请让我知道我可以用来获得所需结果的正确代码语句:

在此处输入图片说明

如果您是 R 新手,这里有另一种可能更容易理解的方法:

library(tidyverse)

date <- seq(as.Date("2015/1/1"), by = "month", length.out = 6)
var1 <- c(723, 983, 437, 732, 173, 537)
var2 <- c(753, 769, 352, 853, 143, 485)
df <- data.frame(date, var1, var2) 
df <- df %>% mutate(var1_prev = lag(var1), var2_prev = lag(var2))

df <- df[-1,] #removes unnecessary first row
df <- df %>% mutate(var1_perdiff = (var1 - var1_prev)/var1_prev * 100,
                    var2_perdiff = (var2 - var2_prev)/var2_prev * 100)

as_tibble(df)
# A tibble: 5 x 7
#date        var1  var2 var1_prev var2_prev var1_perdiff var2_perdiff
#<date>     <dbl> <dbl>     <dbl>     <dbl>        <dbl>        <dbl>
#1 2015-02-01   983   769       723       753         36.0         2.12
#2 2015-03-01   437   352       983       769        -55.5       -54.2 
#3 2015-04-01   732   853       437       352         67.5       142.  
#4 2015-05-01   173   143       732       853        -76.4       -83.2 
#5 2015-06-01   537   485       173       143        210.        239. 

数据表解决方案:

# set to data.table
library(data.table)
df <- setDT(df)

# your percentage function
perct.fun <- function(x){-100 + (x/shift(x,1,type = "lag"))*100}

# add the new variables
v <- c("var1","var2")
df[order(date), (paste0(v, "_diff")) := lapply(.SD, perct.fun), .SDcols=v]

         date var1 var2 var1_diff  var2_diff
1: 2015-01-01  723  753        NA         NA
2: 2015-02-01  983  769  35.96127   2.124834
3: 2015-03-01  437  352 -55.54425 -54.226268
4: 2015-04-01  732  853  67.50572 142.329545
5: 2015-05-01  173  143 -76.36612 -83.235639
6: 2015-06-01  537  485 210.40462 239.160839

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM