2016-02-09 2 views
0

У меня есть дата-рамка, где один столбец - дата yyyy-mm-dd, однако иногда она пропускает даты, оставляя дни, месяцы или даже годы. Как создать строки, в которых отсутствуют даты, и заполнить пустые слоты данных с помощью NA? Я пробовал предлагаемое решение here, но я не могу заставить его работать. Моя dataframe выглядит следующим образом:Заполнение данных таймсером с NULL-строками R

Data <- data.frame(X = c(1:10), 
        Y = seq.Date(as.Date("1870-01-01"),as.Date("1870-01-10"),"day"), 
        Z = rnorm(10,10,5), A = c(10:1), B = c(109:100)) 
Datamissing <- Data[-c(2,4,7:10),] 
Datamissing 

# X   Y   Z A B 
#1 1 1870-01-01 3.581199 10 109 
#3 3 1870-01-03 6.158980 8 107 
#5 5 1870-01-05 10.259756 6 105 
#6 6 1870-01-06 3.077985 5 104 

И выход я хочу это:

Data[c(2,4,7:10),c(3:5)] <- NA 
Datafilled <- Data 
Datafilled 

# X   Y   Z A B 
#1 1 1870-01-01 3.581199 10 109 
#2 2 1870-01-02  NA NA NA 
#3 3 1870-01-03 6.158980 8 107 
#4 4 1870-01-04  NA NA NA 
#5 5 1870-01-05 10.259756 6 105 
#6 6 1870-01-06 3.077985 5 104 
#7 7 1870-01-07  NA NA NA 
#8 8 1870-01-08  NA NA NA 
#9 9 1870-01-09  NA NA NA 
#10 10 1870-01-10  NA NA NA 

Кроме того у меня есть куча этих dataframes в списке. До сих пор у меня есть data.frame со списком даты начала и окончания, я применяю его к новому dataframe:

days <- seq.Date(as.Date("1870-01-01"),as.Date("2016-01-01"),"day") 
    QCdata <- as.data.frame(days) 

Тогда я что-то вроде:

QCdata[,3] <- data_list[[1]][,3][pmatch(QCdata[,1], data_list[[1]][,3])] 

Где data_list просто список, содержащий все мои данные.

ответ

0

Вы можете сделать автообъединение с data.table

library(data.table) 
setDT(Datamissing, key = "Y") 

Datamissing[.(seq.Date(as.Date("1870-01-01"), 
         as.Date("1870-01-10"),"day"))] 
#  X   Y   Z A B 
# 1: 1 1870-01-01 12.9712691 10 109 
# 2: NA 1870-01-02   NA NA NA 
# 3: 3 1870-01-03 14.0270033 8 107 
# 4: NA 1870-01-04   NA NA NA 
# 5: 5 1870-01-05 1.3654924 6 105 
# 6: 6 1870-01-06 0.6544578 5 104 
# 7: NA 1870-01-07   NA NA NA 
# 8: NA 1870-01-08   NA NA NA 
# 9: NA 1870-01-09   NA NA NA 
#10: NA 1870-01-10   NA NA NA 

(я уезжаю X как NA, а потому, что вы не указано, что на самом деле X привязан один-на-один с Y)

+0

Я не понимаю, как это решает мою проблему, или как я могу адаптировать код в соответствии со своей ситуацией. Извините. –

+0

Вот моя MRE: Данные <- data.frame ( X = c (1:10), Y = seq.Date (as.Date ("1870-01-01"), as.Date (" (10: 1), B = c (109: 100)) Datamissing <-> Данные [-c (2,4,7: 10),] #Datamissing - это то, что у меня есть. Я хочу: Заполненный данными <- Данные Заполненный данными [c (2,4,7: 10), c (3: 5)] <- NA # Заполненный датой. Есть дополнительные столбцы, которые я хочу сохранить, но в противном случае ничего не делаю. Это имеет смысл? Благодарю. –

+0

@JominicDones - я добавил ваше MRE к вашему вопросу, где и должно быть. – thelatemail

Смежные вопросы