【问题标题】:Returning previous/last values based on conditional statements根据条件语句返回上一个/最后一个值
【发布时间】:2017-05-26 13:27:10
【问题描述】:

我有一个包含多个 VC、基金、业绩、年份和基金规模的数据集。 每个基金都有一个表现。为了测试是否存在业绩持久性,我想找到以前/前任基金的业绩(“PreviousPerformance”)。 PreviousPerformance 是同一个 VC 之前 FUND 的表现。因此,年份决定了哪些资金首先启动、其次启动,以此类推。

VC            FUND      Performance   Year     FundSize
A Partners    A         0.30          2005        1 
B Capital     B5        0.20          2008        2
B Capital     B4        0.10          2003        3
B Capital     B3        0.25          2001        4
B Capital     B2        0.20          2001        5
B Capital     B1        0.10          2000        6 

  

例如:FUND“B5”的PreviousPerformance为0.1,即B4的表现。

有时,不清楚哪个基金是最后一个基金。例如 B4 有两个之前的基金,B2 和 B3,它们都是在 2001 年成立的。在这种情况下,我希望 PreviousPerformance 是 FundSize 最大的基金的表现(对于 B4,这是 B5)。如果基金没有前任,PreviousPerformance = "-"

最后,数据集应该是这样的。

 VC            FUND      Performance   Year     FundSize  PreviousPerformance
 A Partners    A         0.30          2005        1                       -
 B Capital     B5        0.20          2008        2                     0.1
 B Capital     B4        0.10          2003        3                     0.2
 B Capital     B3        0.25          2001        4                     0.1
 B Capital     B2        0.20          2001        5                     0.1
 B Capital     B1        0.10          2000        6                       -

我不知道使用哪些函数来解决这类问题,有人有建议吗?

示例代码:

FundPerformance = data.table(VC = c("A Partners", rep("B Capital",5)), 
     FUND = c("A","B5","B4","B3","B2","B1"), 
     Performance = c(0.3,0.2,0.1,0.25,0.2,0.1), 
     Year= c(2005,2008,2003,2001,2001,2000), 
     FundSize=c(1:6),
     PreviousPerformance = c ("-",0.1,0.2,0.1,0.1,"-"))

【问题讨论】:

    标签: r conditional calculated-columns


    【解决方案1】:

    我会做以下事情。但我不是data.table 的频繁用户,所以其他人可能有更清洁的解决方案。

    # set up data
    require(data.table)
    dt <- data.table(VC = c("A Partners", rep("B Capital",5)), 
                     Fund = c("A","B5","B4","B3","B2","B1"), 
                     Performance = c(0.3,0.2,0.1,0.25,0.2,0.1), 
                     Year= c(2005,2008,2003,2001,2001,2000), 
                     FundSize=c(1:6),
                     PreviousPerformance = c (NA,0.1,0.2,0.1,0.1,NA))
    setkey(dt, VC, Year)
    
    # find performance for largest fund within each VC each year
    dt[, PreviousPerformanceII:=Performance[FundSize==max(FundSize)], keyby=key(dt)]
    dtUnique <- unique(dt, keyby=key(dt))
    dtUnique <- dtUnique[, list(VC, Year, PreviousPerformanceII)]
    
    # rolling join to pick up last year's performance
    dtUnique[, Year:=Year+1]
    setkey(dtUnique, VC, Year)
    dtNew <- dtUnique[dt, roll=TRUE]
    
    # clean up data
    dtNew$i.PreviousPerformanceII <- NULL
    setkey(dtNew, VC, Year)
    dtNew
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2012-04-02
      • 2016-09-30
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多