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天之间的价格。
请帮助我!
答案 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
希望有所帮助。