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

问题描述 投票:1回答:1

我正在尝试将交易日期列分为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行表示该物业尚未/尚未出售。实际的数据框具有成千上万个不同的属性,我希望对每个属性进行这种操作。

可以相对容易地做到这一点吗?

r date dataframe
1个回答
0
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.