데이터 프레임의 NA (결 측값)를 이웃 값으로 바꾸는 방법
-
12-09-2019 - |
문제
862 2006-05-19 6.241603 5.774208
863 2006-05-20 NA NA
864 2006-05-21 NA NA
865 2006-05-22 6.383929 5.906426
866 2006-05-23 6.782068 6.268758
867 2006-05-24 6.534616 6.013767
868 2006-05-25 6.370312 5.856366
869 2006-05-26 6.225175 5.781617
870 2006-05-27 NA NA
2006-05-20과 같은 인접 비 NNA 값을 사용하여 채우려는 NA와 같은 데이터 프레임 X가 있습니다. 19 & 22의 AVG가 될 것입니다.
질문은 어떻게됩니까?
해결책
데이터가 다음과 같이 제대로 형식화되었습니다
862 2006-05-19 6.241603 5.774208
863 2006-05-20 NA NA
864 2006-05-21 NA NA
865 2006-05-22 6.383929 5.906426
866 2006-05-23 6.782068 6.268758
867 2006-05-24 6.534616 6.013767
868 2006-05-25 6.370312 5.856366
869 2006-05-26 6.225175 5.781617
870 2006-05-27 NA NA
시계열의 본질입니다. 그래서 나는 클래스의 대상에로드 할 것입니다 zoo
(로부터 동물원 패키지)를 사용하면 여러 가지 전략을 선택할 수 있습니다. 아래를 참조하십시오. 선택한 사람은 데이터 및 응용 프로그램의 특성에 따라 다릅니다. 일반적으로 '누락 된 데이터를 파악하는'필드를 호출합니다. 데이터 대치그리고 다소 큰 문학이 있습니다.
R> x <- zoo(X[,3:4], order.by=as.Date(X[,2]))
R> x
x y
2006-05-19 6.242 5.774
2006-05-20 NA NA
2006-05-21 NA NA
2006-05-22 6.384 5.906
2006-05-23 6.782 6.269
2006-05-24 6.535 6.014
2006-05-25 6.370 5.856
2006-05-26 6.225 5.782
2006-05-27 NA NA
R> na.locf(x) # last observation carried forward
x y
2006-05-19 6.242 5.774
2006-05-20 6.242 5.774
2006-05-21 6.242 5.774
2006-05-22 6.384 5.906
2006-05-23 6.782 6.269
2006-05-24 6.535 6.014
2006-05-25 6.370 5.856
2006-05-26 6.225 5.782
2006-05-27 6.225 5.782
R> na.approx(x) # approximation based on before/after values
x y
2006-05-19 6.242 5.774
2006-05-20 6.289 5.818
2006-05-21 6.336 5.862
2006-05-22 6.384 5.906
2006-05-23 6.782 6.269
2006-05-24 6.535 6.014
2006-05-25 6.370 5.856
2006-05-26 6.225 5.782
R> na.spline(x) # spline fit ...
x y
2006-05-19 6.242 5.774
2006-05-20 5.585 5.159
2006-05-21 5.797 5.358
2006-05-22 6.384 5.906
2006-05-23 6.782 6.269
2006-05-24 6.535 6.014
2006-05-25 6.370 5.856
2006-05-26 6.225 5.782
2006-05-27 5.973 5.716
R>
다른 팁
데이터에 따라 tidyr::fill()
옵션 일 수 있습니다 :
library(tidyverse)
df %>% fill(x) # single column x
df %>% fill(x, y) # multiple columns, x and y
df %>% fill(x, .direction = 'up') # filling from the bottom up rather than top down
제휴하지 않습니다 StackOverflow