2016-02-25 8 views
0

У меня есть данные, что выглядит следующим образом:Как заполнить отсутствующие даты?

Date1  Date2  Value2 
1/1/1998 1/1/1998 2 
1/2/1998 1/2/1998 4 
1/3/1998 1/4/1998 6 
1/4/1998 1/5/1998 8 
1/6/1998 1/6/1998 10 
1/7/1998 1/7/1998 12 
1/8/1998 1/10/1998 14 
1/9/1998   
1/10/1998 

Я хочу, чтобы соответствовать Дата2 DATE1 и заполнить недостающую Value2 со средним по значение2 перед ним и после него.

Мои окончательные данные будут выглядеть следующим образом:

Date1  Date2  Value 
1/1/1998 1/1/1998 2 
1/2/1998 1/2/1998 4 
1/3/1998 1/3/1998 5 
1/4/1998 1/4/1998 6 
1/6/1998 1/6/1998 10 
1/7/1998 1/7/1998 12 
1/8/1998 1/8/1998 13 
1/9/1998 1/9/1998 13 
1/10/1998 1/10/1998 14 
+0

Как вы достигаете значения 13? Его нет в исходных данных. –

+0

Это среднее значение 12 и 14. (Значения до и после) –

+0

Я тоже не совсем понимаю вопрос. Вы имеете в виду значения пространственно до и после него? Или дата? – xwang

ответ

5

Импорт данных в R (как правило, вы бы прочитать из двух файлов):

DF1 <- read.table(text = "Date1  
        1/1/1998  
        1/2/1998 
        1/3/1998  
        1/4/1998 
        1/6/1998 
        1/7/1998 
        1/8/1998  
        1/9/1998   
        1/10/1998", header = TRUE) 

DF2 <- read.table(text = "Date2  Value2 
        1/1/1998 2 
        1/2/1998 4 
        1/4/1998 6 
        1/5/1998 8 
        1/6/1998 10 
        1/7/1998 12 
        1/10/1998 14", header = TRUE) 

Слияние data.frames:

DF <- merge(DF1, DF2, by.x = "Date1", by.y = "Date2", all.x = TRUE) 
DF$Date1 <- as.Date(DF$Date1, format = "%m/%d/%Y") #parse dates 
DF <- DF[order(DF$Date1),] #order the data.frame 

Заполните средние значения:

library(zoo) 
DF$Value2 <- na.approx(DF$Value2, method = "constant", f = 0.5) 

#  Date1 Value2 
# 1 1998-01-01  2 
# 3 1998-01-02  4 
# 4 1998-01-03  5 
# 5 1998-01-04  6 
# 6 1998-01-06  10 
# 7 1998-01-07  12 
# 8 1998-01-08  13 
# 9 1998-01-09  13 
# 2 1998-01-10  14 
Смежные вопросы