从R中的“单个交易日期”列中提取购买和销售日期

时间:2019-10-27 03:15:49

标签: r date dataframe

我正在尝试将交易日期列分为2个单独的列,其中一个列为购买日期,另一个列为出售日期。同样,我想将单个交易价格列分为卖价和买价。 this post与此类似,但在这里我想跟踪每个交易日期,而不是仅将最早的日期估算为购买,将最新的日期估算为出售。因此,例如下面是当前数据框:

property = c('A','A','A','A','B','B','B')
transaction_dates = c("2011-03-09", "2013-06-06", "2015-08-28", "2016-07-18", "2016-12-13", "2018-10-29", "2019-11-30")
prices = c(750000, 830000, 820000,800000,825000,900000,600000) 

proptx = data.frame(property,transaction_dates,prices)

  property transaction_dates  prices
1        A        2011-03-09  750000
2        A        2013-06-06  830000
3        A        2015-08-28  820000
4        A        2016-07-18  800000
5        B        2016-12-13  825000
6        B        2018-10-29  900000
7        B        2019-11-30  600000

我正在尝试添加列(或者可能生成一个新的数据框),以将交易日期列和价格列分解为单独的“购买”和“出售”列,像这样

  property    buy_date    buy_price  sell_date   sell_price
1        A    2011-03-09  750000     2013-06-06  830000
2        A    2013-06-06  830000     2015-08-28  820000
3        A    2015-08-28  820000     2016-07-18  800000
4        A    2016-07-18  800000     NA          NA
5        B    2016-12-13  825000     2018-10-29  900000
5        B    2018-10-29  900000     2019-11-30  600000
6        B    2019-11-30  600000     NA          NA

最终,我想做的是跟踪买卖日期之间的时间长度,然后计算出给卖方的回报。第4行和第6行表示该物业尚未/尚未出售。实际的数据帧具有成千上万个不同的属性,我希望对每个属性进行这种操作。

这相对容易做到吗?

1 个答案:

答案 0 :(得分:1)

使用data.table

library(data.table)
dt <- as.data.table(proptx)
setnames(dt, old="transaction_dates", new="buy_date")
dt[, sell_date:=shift(buy_date, 1, type='lead'), by=property]
dt[, sell_price:=shift(prices, 1, type='lead'), by=property]
dt

   property   buy_date prices  sell_date sell_price
1:        A 2011-03-09 750000 2013-06-06     830000
2:        A 2013-06-06 830000 2015-08-28     820000
3:        A 2015-08-28 820000 2016-07-18     800000
4:        A 2016-07-18 800000       <NA>         NA
5:        B 2016-12-13 825000 2018-10-29     900000
6:        B 2018-10-29 900000 2019-11-30     600000
7:        B 2019-11-30 600000       <NA>         NA
相关问题