2012-11-22 1 views
1

가능한 중복 :
Replacing NAs with latest non-NA value각 열의 이전 값을 사용하여 누락 된 정보를 어떻게 채울 수 있습니까?

나는 각 열에 대해 이전 값을 사용하여 누락 된 정보 채울 수 있는가?

Date.end Date.beg Pollster Serra.PSDB 
2012-06-26 2012-06-25 Datafolha  31.0 
2012-06-27  <NA>  <NA>   NA 
2012-06-28  <NA>  <NA>   NA 
2012-06-29  <NA>  <NA>   NA 
2012-06-30  <NA>  <NA>   NA 
2012-07-01  <NA>  <NA>   NA 
2012-07-02  <NA>  <NA>   NA 
2012-07-03  <NA>  <NA>   NA 
2012-07-04  <NA>  Ibope  22 
2012-07-05  <NA>  <NA>   NA 
2012-07-06  <NA>  <NA>   NA 
2012-07-07  <NA>  <NA>   NA 
2012-07-08  <NA>  <NA>   NA 
2012-07-09  <NA>  <NA>   NA 
2012-07-10  <NA>  <NA>   NA 
2012-07-11  <NA>  <NA>   NA 
2012-07-12 2012-07-09  Veritá  31.4 

답변

2

이것이 최선의 방법인지 잘 모르겠습니다. 아마도 그 기능을 가진 패키지가있을 것입니다. 다음 접근 방식은 성능이 가장 좋은 방법이 아닐 수도 있지만 중소 규모의 데이터 세트는 정상적으로 작동하고 잘되어야합니다.

그것은 작동
set.seed(123) 
test <- 1:20 
test[floor(runif(5,1, 20))] <- NA 

> test 
[1] 1 2 3 4 5 NA 7 NA 9 10 11 12 13 14 NA 16 NA NA 19 20 

> fillNAByPreviousData(test) 
[1] 1 2 3 4 5 5 7 7 9 10 11 12 13 14 14 16 16 16 19 20 
+0

, 감사 : 나는

fillNAByPreviousData <- function(column) { # At first we find out which columns contain NAs navals <- which(is.na(column)) # and which columns are filled with data. filledvals <- which(! is.na(column)) # If there would be no NAs following each other, navals-1 would give the # entries we need. In our case, however, we have to find the last column filled for # each value of NA. We may do this using the following sapply trick: fillup <- sapply(navals, function(x) max(filledvals[filledvals < x])) # And finally replace the NAs with our data. column[navals] <- column[fillup] column } 

여기에 테스트 데이터 집합을 사용하여 몇 가지 예입니다 (같은 이상 만 행 또는 무언가) 매우 큰 데이터 세트를 적용 할주의 할 것이다. 그럼에도 불구하고 솔루션이 전체 데이터 프레임에서 작동하지 않기 때문에 여러 번 작업을 반복해야했습니다. – daniel

+0

당신은'apply'를 사용해서 그것을 할 수있었습니다. 그러나 중복 질문에 대한 답변은 아마도 내 것보다 훨씬 빠릅니다. – Thilo

관련 문제