2017-05-10 9 views
0

전체 데이터 프레임에 61 개 이상의 실행중인 중앙값을 적용하고 싶습니다.평균을 데이터 프레임에 적용

Error in if (a < b) { : missing value where TRUE/FALSE needed 
In addition: Warning message: 
In FUN(newX[, i], ...) : NAs introduced by coercion 

은 이미 첫 줄을 제외하려고했으나 같은 오류가 나타 : 나는 오류가

df_med<-apply(df, 2, runmed, k=61)

:

df= 13.03.2017 11:42 12:42:00 877401 922800 -5.045 147 14 NA 
    13.03.2017 11:42 12:42:01 877440 922839 -5.045 148 14 504 
    ... 
    13.03.2017 14:40 15:40:12 864742 868109 -0.389 149 25 515 

은이 코드를 사용했다.

+0

'Runmed'는 평균이 아닌 실행중인 중간 값을 계산하는 함수입니다. 또한 데이터 프레임의 어떤 값을 평균/중간 값으로 가져 가고 싶습니까? – user3640617

+3

데이터를 실제 데이터 프레임으로 다시 포맷 할 수 있습니까? 'dput (head (df))'또는 몇 가지 일을하십시오. – AkselA

+0

@ user3640617 마지막 열에서 실행중인 중앙값이 필요하지만 다른 열에서도 필요합니다. 그래서 저는 전체 데이터 프레임에 함수를 적용하고 싶습니다. – brtstph

답변

1

이 데이터를 다 변수 시계열로 취급하는 것이 좋습니다. 도서관 zoo에 대한 선호도가 있지만 다른 대안이 있습니다.
좋은 예제 데이터가 분명히 나오지 않으면 나는 내 자신의 일부를 조롱했다. 적용 가능할 수도 있고 그렇지 않을 수도 있습니다. 이 rollapply 사용하고 오히려 na.omit 또는 유사한 방법을 처리하지 않고, median 함수 인수로 na.rm=TRUE 통과하기 쉽고 NA 값의 존재와

library(zoo) 

# Put together a data frame with a time vector in the first column  
df <- data.frame(x=as.POSIXct(1:10*60, origin="1970-01-01"), 
       a=c(NA, 1, 6, 4, 2, 9, 4, 3, 1, 2), 
       b=c(2, 4, 1, 5, 2, 8, 4, 6, 9, NA)) 

# Convert the data frame into a multivariate time series  
df.zoo <- read.zoo(df) 
summary(df.zoo) 

# Apply a rolling median on the time series  
rollapply(df.zoo, 3, median, na.rm=TRUE, fill=NA) 

. fill=NA은 시리즈의 길이가 이전과 동일 함을 보장합니다.