2017-07-31 178 views
1

我有两个数据框,一个包含调查日期的详细信息,另一个包含记录个人的实例。具体如下:基于另一个数据值的数据汇总数据

Records <- data.frame("Location"=c("A","A","B","C","C","C","D"), 
         "Date"= c("09/01/2017","12/01/2017","20/01/2017","06/06/2017","03/06/2017","19/01/2017","02/01/2017"), 
         "Individuals"= c(3,2,6,4,0,1,6)) 
Surveys <- data.frame("Location"=c("A","B","C","D","A","B","C","D"), 
        "Start"= c(rep("01/01/2017",length=4),rep("01/06/2017",length=4)), 
         "End"= c(rep("01/02/2017",length=4),rep("01/07/2017",length=4))) 

> Surveys 
    Location  Start  End 
1  A 01/01/2017 01/02/2017 
2  B 01/01/2017 01/02/2017 
3  C 01/01/2017 01/02/2017 
4  D 01/01/2017 01/02/2017 
5  A 01/06/2017 01/07/2017 
6  B 01/06/2017 01/07/2017 
7  C 01/06/2017 01/07/2017 
8  D 01/06/2017 01/07/2017 
> Records 
    Location  Date Individuals 
1  A 09/01/2017   3 
2  A 12/01/2017   2 
3  B 20/01/2017   6 
4  C 06/06/2017   4 
5  C 03/06/2017   0 
6  C 19/01/2017   1 
7  D 02/01/2017   6 

我希望添加一列求和发生在该网站及相关时间内个体数量的调查数据帧。结果是这样的:

Sum.Individuals <- c(5,6,1,6,0,0,4,0) 
Final <- cbind(Surveys,Sum.Individuals) 

> Final 
    Location  Start  End Total.Individuals 
1  A 01/01/2017 01/02/2017     5 
2  B 01/01/2017 01/02/2017     6 
3  C 01/01/2017 01/02/2017     1 
4  D 01/01/2017 01/02/2017     6 
5  A 01/06/2017 01/07/2017     0 
6  B 01/06/2017 01/07/2017     0 
7  C 01/06/2017 01/07/2017     4 
8  D 01/06/2017 01/07/2017     0 

我希望这是有道理的,任何帮助表示赞赏。

干杯

回答

0

我建议以下步骤:

  1. 上的位置接合两个表
  2. 滤波,其中日期是开始之间,并且通过位置结束
  3. 组,开始和结束;总和个人。

因此可能会是这样:

library(tidyverse) 
library(magrittr) 
df <- inner_join(surveys,records,by='Location') 
df %<>% filter(Date >= Start, Date <= End) 
df %<>% group_by(Location,Start,End) %>% summarise(totalindividuals=sum(individuals) 

希望帮助。如果您发现代码混淆,您可能希望探索加入和过滤的概念,以及与这些任务非常相关的dplyr包。

+0

嗨,使用该方法,我得到一个只有一个观察与所有细胞的总数的框架。同样在我的实际数据中,记录和调查框架很大,有很多额外的变量,所以我不确定加入它们是否可行。干杯 – Charlie3D

+0

加入前需要的栏目的子集。你可以使用'data.table'来进行非Equi连接。 – Gregor