2013-05-08 47 views
0

我有以下数据框,其中包括餐馆(id#),所有者和购买日期。有时餐厅会更改所有权,但为了分析目的,我想创建另一个只保留最新所有者名称的列,这由“购买日期”决定。我如何创建这个新列?在这个例子中,餐馆23在2013年1月1日改变了手,所以我想只包括新所有者的名字(Bob)作为该餐厅的所有行的当前所有者,如下所示。如果餐厅不换手,请为​​“当前所有者”列保留与“所有者”列相同的名称。基于多列中的值在R数据框中创建新列

Restaurant <- c(23,23,23,23,23,23,23,15,15,15,15,17,17,17,17) 

    owner <- c("Chuck","Chuck","Chuck","Chuck","Bob","Bob","Bob", 
    "Hazel","Hazel","Hazel","Hazel","Pete","Pete","Pete","Pete") 

    purchaseDate <- c("3/4/2011","3/4/2011","3/4/2011","3/4/2011", 
    "1/1/2013","1/1/2013","1/1/2013","4/11/2010","4/11/2010","4/11/2010", 
    "4/11/2010","9/2/2012","9/2/2012","9/2/2012","9/2/2012") 

    df <- data.frame(Restaurant = Restaurant, owner=owner, purchaseDate=purchaseDate) 

    df$currentOwner <- c("Bob","Bob","Bob","Bob","Bob","Bob","Bob","Hazel","Hazel","Hazel","Hazel","Pete","Pete","Pete","Pete") 

回答

0

您可以使用此:

do.call(rbind, by(df, df$Restaurant, function(d) 
     within(d, currentOwner2 <- as.character(
      owner[which.max(as.Date(purchaseDate, format="%d/%m/%Y"))])))) 

感谢@Thomas为挖掘这个问题:-)

+0

完美!谢谢。 – 2013-08-14 17:12:46

相关问题