使用r在前一天带来数据

时间:2018-01-19 02:33:20

标签: sql r

Date        Profit        
2018-01-18  3024490

2018-01-17  3985331

2018-01-16  5987905 

2018-01-15  5742019 

2018-01-14  4645206

2018-01-13  4766255 

我有上面的数据表,想知道最终的利润差异和增长率。

所以我认为我必须创建一个名为previous day profit的新列,将前一天的数据放入新列,并将aggregate放在两列之间。我的意思是两天数据应该在同一行例如)2018-1-1利润/ 2018-1-2利润应该在同一行比较2天之间的价格。

请帮助我!

2 个答案:

答案 0 :(得分:2)

使用dplyr显示步骤的完整工作示例。

library(dplyr)
data = read.table(header = T, 
                  text="Date Profit        
                  2018-01-18  3024490
                  2018-01-17  3985331
                  2018-01-16  5987905 
                  2018-01-15  5742019 
                  2018-01-14  4645206
                  2018-01-13  4766255")

data = 
  data %>% 
  arrange(Date) %>% 
  mutate(PreviousProfit = lag(Profit)) %>% 
  mutate(Difference = Profit - PreviousProfit)

data
#        Date  Profit PreviousProfit Difference
#1 2018-01-13 4766255             NA         NA
#2 2018-01-14 4645206        4766255    -121049
#3 2018-01-15 5742019        4645206    1096813
#4 2018-01-16 5987905        5742019     245886
#5 2018-01-17 3985331        5987905   -2002574
#6 2018-01-18 3024490        3985331    -960841

答案 1 :(得分:1)

lag()包中的dplyr函数非常适合。

让我们首先使用df包中的tribble创建您的数据框tibble

library(tibble)
df <- tribble(
       ~Date,  ~Profit,        
"2018-01-18",  3024490,
"2018-01-17",  3985331,
"2018-01-16",  5987905,
"2018-01-15",  5742019,
"2018-01-14",  4645206,
"2018-01-13",  4766255)

现在我们可以加载dplyr并开始工作。基本上,您需要做的是使用mutate创建一个新列,并使该列成为Profit的滞后。但在我们这样做之前,我们会根据Date列排列数据框,因此滞后实际上指的是前一天引用前一行的时间。

library(dplyr)
df <- df %>% 
  arrange(Date) %>% 
  mutate(prev_day_profit = lag(Profit))

当我们打印data.frame df时会导致以下结果。

> df
# A tibble: 6 x 3
        Date  Profit prev_day_profit
       <chr>   <dbl>           <dbl>
1 2018-01-13 4766255              NA
2 2018-01-14 4645206         4766255
3 2018-01-15 5742019         4645206
4 2018-01-16 5987905         5742019
5 2018-01-17 3985331         5987905
6 2018-01-18 3024490         3985331

希望有所帮助。