2014-09-25 2 views
1

두 가지 관련 질문이 있습니다. 먼저 벡터를 일정 간격으로 분할하고 각 간격 및 두 번째 함수에 어떻게 적용합니까, 일정 간격으로 벡터를 데이터 프레임으로 분할하는 방법 여기서 각 간격은 데이터 프레임의 행입니다. 첫 번째 질문은 이전에 물었고 rollapply()zoo에 사용하여 멋진 해결책이있는 것으로 나타 났지만 설치를 시도했을 때 zoo은 R 3.1.1에 사용할 수 없다고 통보 받았습니다.벡터에 규칙 간격으로 함수 적용

나는 해결책을 가지고 있지만, 나는 그들을 작동시키기 위해 추가 색인 변수를 만들어야한다는 점이 마음에 들지 않습니다. 더 간단한 솔루션? 일정한 간격

d <- data.frame(Value=rnorm(1000,100,20), #create random values 
       y=factor(rep(1:100,each=10)), # create a group variable 
       t=factor(rep(1:10, 100))) # create an observation # variable numbering 
              # observation 1-10 

data.frame(tapply(d$Value, FUN=mean, INDEX=d$y)) #take mean of observations by group 

2 부 을 분할 dataframe으로 벡터에 함수를 적용

파트 1.

library(reshape2) 
dcast(data=d, y~t, value.var='Value') 

R 버전 3.1.1 (2014년 7월 10일) 플랫폼 : x86_64에-W64-mingw32/64 (64 비트) 당신의 그룹화 평균이 달성

+1

'zoo' 건재, 난 그냥'install.packages'를 사용하여 동일한 아키텍처를 설치했습니다. http://cran.r-project.org/web/packages/zoo/index.html – jbaums

+0

그리고 그것을 사용하는 방법은 다음과 같습니다 :'rollapply (d $ Value, width = 10, by = 10, FUN = 평균)'. 두 번째 질문에 관해서는 행렬이 모두 숫자 인 경우 행렬이 더 적절할 수 있습니다 :'m <- matrix (d $ Value, byrow = T, ncol = 10)'. 필요에 따라 as.data.frame을 래핑하십시오. 그런 다음'rowMeans (m)'을 사용하여 첫 번째 목표를 달성 할 수 있습니다. – jbaums

+0

좋아, 나는 동물원을 다시 점검 할 것이다. 이 두 번째 솔루션은 정확히 내가 찾고있는 간단한 솔루션입니다! – TBP

답변

2

한 가지 방법은, 언급 한대로 zoo::rollapply을 사용하십시오. 이것은 다음과 같이 수행 할 수 있습니다 (모든 열을 일관 모드, 예를 들어, 숫자의 경우 전자는 일반적으로보다 효율적이고 종종 더 적합하지만, 또는 data.frame)를 matrixd$value 변환, 또는

rollapply(d$Value, width=10, by=10, FUN=mean) 

하고, 행을 계산하라. 예를 들면 :

m <- matrix(d$value, byrow=TRUE, ncol=10) 
rowMeans(m) 

또는 특정 기능 f에 대한 :

apply(m, 1, f)