代码之家  ›  专栏  ›  技术社区  ›  Herr Student

数据帧合并中的双时间戳

  •  3
  • Herr Student  · 技术社区  · 12 年前

    我确实有一个df,看起来像这样:

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

    第一个是1970-01-01的UTC时间戳,所以我会使用 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
    

    当然,它也可能是动物园里的真正约会对象! 谢谢

    1 回复  |  直到 12 年前
        1
  •  4
  •   Joshua Ulrich    12 年前

    我会单独处理你的数据帧的每一列。对于每一列,删除该列和时间索引中缺失的观测值,然后构建 zoo 对象然后你可以使用 do.call 打电话 merge 在您的列表中 动物园 物体。

    # 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