двойная временная метка при слиянии фреймов данных

У меня есть df, выглядящий так:

time,v1,v1,v3,v4
1352639505, , ,94,101
1352639565, , ,94,101
1352639505,10,222, ,
1352639565,11,221, ,

Во-первых, это отметка времени UTC от 1 января 1970 года, поэтому я бы использовал as.POSIXct(df$time,origin="1970-01-01",tz="UTC"). Но, как видите, дата двойная. NA и значения пропускаются. Как объединить одну и ту же дату в кадре данных? Первая настройка как .POSIXct или слияние?

Результат должен выглядеть так:

time,v1,v1,v3,v4
1352639505,10,222,94,101
1352639565,11,221,94,101

Конечно, это также может быть зоопарк с реальным свиданием! Спасибо!


person Herr Student    schedule 25.04.2013    source источник
comment
Ваш вопрос не ясен. Предоставьте воспроизводимый пример.   -  person Joshua Ulrich    schedule 25.04.2013


Ответы (1)


Я бы рассматривал каждый столбец вашего data.frame индивидуально. Для каждого столбца удалите отсутствующие наблюдения из столбца и индекса времени, а затем создайте свой объект zoo. Затем вы можете использовать do.call для вызова merge в вашем списке zoo объектов.

# helper function to build zoo objects with no missing values
f <- function(v, i) {
  na <- is.na(v)
  iposix <- as.POSIXct(i, origin="1970-01-01", tz="UTC")
  zoo(v[!na], iposix[!na])
}
df <- structure(list(time = c(1352639505L, 1352639565L, 1352639505L, 
1352639565L), v1 = c(NA, NA, 10L, 11L), v1 = c(NA, NA, 222L, 
221L), v3 = c(94L, 94L, NA, NA), v4 = c(101L, 101L, NA, NA)), .Names = c("time", 
"v1", "v1", "v3", "v4"), class = "data.frame", row.names = c(NA, -4L))
library(zoo)
Data <- do.call(merge, lapply(df[-1], f, i=df$time))
Data
#                     v1 v1.1 v3  v4
# 2012-11-11 07:11:45 10  222 94 101
# 2012-11-11 07:12:45 11  221 94 101
person Joshua Ulrich    schedule 25.04.2013
comment
+1 Творческое решение. Пытаюсь понять do.call - person Simon O'Hanlon; 26.04.2013
comment
@SimonO101: do.call создает и оценивает вызов функции, используя функцию и (именованный) список аргументов. В этом случае он создает что-то вроде merge(v1, v1.1, v3, v4). - person Joshua Ulrich; 26.04.2013