2016-07-12 7 views
0

큰 테이블에서 누적 합계를 얻으려고합니다. 말로 설명하기가 다소 어렵지만 Excel에서 실제 프로세스를 매우 쉽게 처리 할 수 ​​있습니다. 나는 R에 새로운 해요 및 R.에 Excel에서 내 능력을 번역하는 방법을 모른다다중 기준 누적 합계

원시 데이터의 내 예를 들어 테이블 : 이것은 내 최종 결과이 원하는 무엇

Date  Name  Valid Population 
1/4/2016 US  Yes  -100 
1/4/2016 US  Yes  -1000 
1/4/2016 Angola Yes  400 
1/5/2016 US  Yes  500 
1/6/2016 Angola Yes  300 
1/7/2016 Japan No  -100 
1/8/2016 Japan Yes  -500 
1/8/2016 US  Yes  600 
1/9/2016 Angola Yes  -200 
1/10/2016 US  Yes  800 

. 새로운 열 머리글이있는 별도의 데이터 프레임이어야하며 날짜 열은 순차적 순서로되어 있으며 고유 값만 포함해야합니다.

Date  US  Angola Japan 
1/4/2016 -1100 400  0 
1/5/2016 -600 400  0 
1/6/2016 -600 700  0 
1/7/2016 -600 700  0 
1/8/2016  0  700 -500 
1/9/2016  0  500 -500 
1/10/2016 800 500 -500 

원하는 테이블을 얻는 데 도움이되는 사람은 누구나 좋습니다. 감사

입력 DF 마지막에 음과이라고 가정 수수께끼가

답변

0

우리는 Date"Date"에 클래스 각각 DatePopulation 합산하여 다양한 형태의 매트릭스 x을 만들 xtabs를 이용해 변환/Name 셀의 경우 각 열에 cumsum을 적용하여 a 행렬을 만든 다음 a을 사용하거나 선택적으로 a을 데이터 프레임으로 변환하십시오. 패키지가 사용되지 않습니다.

DF$Date <- as.Date(DF$Date, format = "%m/%d/%Y") 

x <- xtabs(Population ~ Date + Name, DF) 
a <- apply(x, 2, cumsum) 
data.frame(Date = as.Date(rownames(a)), a, row.names = NULL) 

제공 :

 Date Angola Japan US 
1 2016-01-04 400  0 -1100 
2 2016-01-05 400  0 -600 
3 2016-01-06 700  0 -600 
4 2016-01-07 700 -100 -600 
5 2016-01-08 700 -600  0 
6 2016-01-09 500 -600  0 
7 2016-01-10 500 -600 800 

참고 : 우리는 다음과 같이 재현성 입력 DF을 정의

Lines <- "Date  Name  Valid Population 
1/4/2016 US  Yes  -100 
1/4/2016 US  Yes  -1000 
1/4/2016 Angola Yes  400 
1/5/2016 US  Yes  500 
1/6/2016 Angola Yes  300 
1/7/2016 Japan No  -100 
1/8/2016 Japan Yes  -500 
1/8/2016 US  Yes  600 
1/9/2016 Angola Yes  -200 
1/10/2016 US  Yes  800" 

DF <- read.table(text = Lines, header = TRUE) 
+0

이 굉장합니다. 답장을 보내 주셔서 감사합니다. 그것은 완벽하게 작동했습니다. 이제는 내 프로젝트의 가장 큰 부분 중 하나를 담당합니다. 나는이 xtabs 기능에 대해 전혀 알지 못했다. 아직도 실제로 무엇을하는지 완전히 확신 할 수는 없지만 작동합니다. – RiddleMeThis