2013-02-15 3 views
5

특정 열의 값에 NA 값이 포함되어 있는지 테스트하고 싶으면 해당 NA 공간을 이전 행의 값으로 채 웁니다. 나는 여전히 apply 패밀리를 사용하려고 노력 중이다.R - 각 행을 반복하고 이전 행의 값으로 채우기

예. 나는 이것을 설정하려면 :

 Date Balance 
2012-01-01  1000 
2012-01-02  NA 
2012-01-03  NA 
2012-01-04  1200 
2012-01-05  1215 
2012-01-06  NA 

로 :

 Date Balance 
2012-01-01  1000 
2012-01-02  1000 
2012-01-03  1000 
2012-01-04  1200 
2012-01-05  1215 
2012-01-06  1215 
+2

동물원 패키지에서 'na.locf'를 확인하십시오. –

+0

좋은 @ @ Jilber를 찾으십시오. 'apply' 패밀리는 주어진 값으로하고 싶은 것이 근처 값에 의존하기 때문에 ('apply' 함수에서 인덱스를 사용하지 않아도되기 때문에) 여기서 잘 작동하지 않을 것입니다. –

+0

가장 단순한'base' 메쏘드는 아마도'for' 루프 일 것입니다. (틀렸을 때 저를 수정하십시오) : for (i in 1 : length (DF $ Balance)) if (is.na (DF $ Balance [i ])) DF $ 잔액 [i] = DF $ 잔액 [i-1]' –

답변

7

이 동물원 패키지에서 na.locf 기능을위한 작업입니다. 다음, 당신의 data.frame이 ?na.locf

DF을 고려 참조 :도 정중하게이 작업을 수행 roll = TRUEdata.table를 사용

DF <- read.table(text="  Date Balance 
2012-01-01  1000 
2012-01-02  NA 
2012-01-03  NA 
2012-01-04  1200 
2012-01-05  1215 
2012-01-06  NA", header=TRUE) 

library(zoo) 
na.locf(DF) 
     Date Balance 
1 2012-01-01 1000 
2 2012-01-02 1000 
3 2012-01-03 1000 
4 2012-01-04 1200 
5 2012-01-05 1215 
6 2012-01-06 1215 
5

!

require(data.table) 
# convert Date column to date format 
df$Date <- as.Date(df$Date) 
# keep this, as we'll remove rows with NA to use `roll` 
dates <- df$Date 
# remove rows with NA 
dt2  <- na.omit(data.table(df)) 
# set key to Date 
setkey(dt2, "Date") 
# use dates which has the NA rows that will be filled 
# with value from previous column with roll=T 
dt2[J(dates), roll=T] 

#   Date Balance 
# 1: 2012-01-01 1000 
# 2: 2012-01-02 1000 
# 3: 2012-01-03 1000 
# 4: 2012-01-04 1200 
# 5: 2012-01-05 1215 
# 6: 2012-01-06 1215 
관련 문제