2017-10-15 4 views
0

다음과 같이 관리하는 일정한 중복 기간을 통해 그룹화 된 데이터를 분류하고자합니다.R에서 데이터를 복제하지 않고 데이터 세트를 분할하는 방법은 무엇입니까?

library(dplyr) 

## Create data frames 
df_A = data.frame("ID" = rep("A" , 5) , "Date" = c("2000-01-03" , "2000-02-03" , "2000-04-01" , "2000-05-03" ,"2000-05-04") , "Var_1"=c(1,2,3,4,5)) 

df_B = data.frame("ID" = rep("B" , 5) , "Date" = c("2000-01-03" , "2000-01-04" , "2000-01-05" , "2000-03-02" ,"2000-04-01") , "Var_1"=c(6,7,8,9,10)) 

df_C = data.frame("ID" = rep("C" , 5) , "Date" = c("2000-01-03" , "2000-02-03" , "2000-03-01" , "2000-04-03" ,"2000-05-04") , "Var_1"=c(11,12,13,14,15)) 

## Bind and group data frames together via ID 
mydf = bind_rows(df_A , df_B , df_C) %>% group_by(ID) 

## Create date range 
filterDates = data.frame("start" = c("2000-01-01" , "2000-02-01","2000-03-01","2000-04-01") , "end" = c("2000-02-29","2000-03-31","2000-04-30","2000-05-31")) 

## Segment data according to date range 
segmented_df = apply(filterDates , 1 , function(x) filter(mydf , Date>= as.Date (x["start"]) & Date<=x["end"] )) 

그러나, 프로세스는 목록 내의 어떤 데이터의 중복을 생성한다.

## For e.g. 
segmented_df[[2]][1,] ## This was already in segmented_df[[1]][2,] 

데이터 복제가 발생하지 않도록하려면 어떻게해야합니까?

group_by (ID, Date)를 사용하여 생각했지만 날짜 범위를 고려하지 않았습니다.

참고 : 특정 형식의 솔루션을 찾고있는 것은 아니지만 메모리가 효율적이고 각 세그먼트 그룹을 쉽게 호출 할 수 있다면 바람직합니다.

잘못된 용어를 사용하면 사전에 사과드립니다.

답변

0

대신 GROUP_BY의 독특한 시도 할 수 있습니다

mydf = bind_rows(df_A , df_B , df_C) %>% unique(ID) 
관련 문제