【问题标题】:merging lists within lists via time stamp通过时间戳合并列表中的列表
【发布时间】:2011-10-22 13:17:13
【问题描述】:

我一周前在 R-help 上要求过这个问题,直到现在才得到答复……我在一个列表中有多个 gps 和温度数据的 data.frames。一个 data.frame 看起来像:

全球定位系统:

       date     time     x.lat     x.lon   
1      22.05.11 13:50:37 53.57908 10.034599 
2      22.05.11 13:50:38 53.57906 10.034633 

温度:

        date     time     temp
1      22.05.11 13:50:38 21.6120
2      22.05.11 13:50:39 21.6070

所以我有两个列表,一个包含多个 gps-data.frames,一个包含多个 temp-dataframes。我使用 lapply 来操作这两个列表,但不能将 temp 和 gps 合并到一个包含所有 data.frames 的大列表中,仅适用于两个列表中都存在的时间戳,例如上面的示例仅存在 13:50:38在两者中:

GPS+温度:

       date     time    x.lat     x.lon     temp
1      22.05.11 13:50:38 53.57906 10.034633 21.6070

对于可以正常工作的单个数据帧:

both <- merge(gps,temp)

对于 data.frames 的两个列表,我首先尝试对两个列表进行 lapply...类似

both <- lapply(temp, gps, function(x){x <- merge(x);x})

然后我尝试了

both <- merge.list(gps,temp)

但这也不起作用。它只是将第一个列表“gps”传输到两者

【问题讨论】:

  • 您的术语不是混淆就是混淆。你说你“有两个列表,一个有多个 gps-data.frames,一个有多个 temp-dataframes”,但你没有给出这种结构的例子。 “GPS”和“temp”不像“数据帧列表”那样显示。你真的有元素是数据框的列表吗?

标签: list r merge timestamp dataframe


【解决方案1】:

试试Map:

> Map(merge, GPS, temp)
[[1]]
      date     time    x.lat    x.lon   temp
1 22.05.11 13:50:38 53.57906 10.03463 21.612

或者像Map 那样直接调用mapply

> mapply(merge, GPS, temp, SIMPLIFY=FALSE)
[[1]]
      date     time    x.lat    x.lon   temp
1 22.05.11 13:50:38 53.57906 10.03463 21.612

【讨论】:

  • 谢谢,成功了。 Joshua Wiley-2 在 R-Help 中发布的另一个解决方案是: lapply(seq_along(GPS), function(i) { merge(GPS[[i]], temp[[i]]) })
猜你喜欢
  • 2015-03-19
  • 2017-05-13
  • 1970-01-01
  • 2013-01-26
  • 2014-08-10
  • 1970-01-01
  • 2014-10-25
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多