2016-11-22 210 views
0

我在R A數據幀(比如摘要):子集n個

Begin Date | EndDate | Month | Year | Count 
2/1/2014 | 1/31/2015 | Jan | 2014 | 10 
3/1/2014 | 2/28/2015 | Feb | 2014 | 10 
4/1/2014 | 3/31/2015 | Mar | 2014 | 10 
5/1/2014 | 4/30/2015 | Apr | 2014 | 10 

另一個數據幀(說術語)

Student_Hire_Date | Student_ID 
2/1/2014 | 100001 
2/2/2014 | 100002 
2/3/2014 | 100003 
2/4/2014 | 100004 
2/5/2014 | 100005 

我需要一個R代​​碼來填充「計數」列,方法是從術語表中獲取其中Student_Hire_Date介於彙總表中的「BeginDate」和「EndDate」之間的數據子集。

的R代碼等同於:

Summary$Count <- "select count(*) from Terms,Summary 
        where Terms.Student_Hire_Date between 
         Summary.BeginDate and Summary.EndDate" 
        GROUP BY Summary.EndDate 

我嘗試使用下面的代碼,但我得到的每一個日期範圍相同的計數。

summary$Count <- nrow(subset(Terms, 
           !is.na(Student_ID) 
           & Student_Hire_Date >= as.Date(Summary$BeginDate) 
           & Student_Hire_Date <= as.Date(Summary$EndDate) 

請幫忙!!!!!!

+0

您是否考慮過'sqldf'包?有了它,你可以運行你的SQL查詢寫。 –

回答

0

考慮sapply遍歷每一行摘要行值比較條款行值。現在您正在爲的每一行分配相同的條件BeginDateEndDate與指定的新列的外部行不匹配。

Summary$Count <- sapply(seq_len(nrow(Summary)), function(i) { 
     nrow(subset(Terms, !is.na(Student_ID) 
        & Student_Hire_Date >= Summary$BeginDate[[i]] 
        & Student_Hire_Date <= Summary$EndDate[[i]])) 
})