【问题标题】:Creating a function to iterate over tibble elements within a large list in R创建一个函数来迭代 R 中一个大列表中的 tibble 元素
【发布时间】:2020-05-15 07:06:32
【问题描述】:

我正在尝试创建一个函数来自动化我需要在将多个数据集组合成 xts 之前执行的一些基本格式设置。我可以批量读取文件并创建大量小标题。但是我很难创建一个函数来迭代该列表。当我将单个文件读入 df 时,我一直在运行以下命令:

df<-df[!(duplicated(df$DateTime)),] dfx<-xts(df[,-1], order.by = as.POSIXct(df$DateTime, format="%d-%b-%y %H:%M:%S"))

然后我对所有“dfx”对象进行合并。我对数据的一个问题是 DateTime 并不总是在文件之间匹配,并且上述方法给了我一个带有 NA 的大 xts,这是我更喜欢另一种类型的合并/rbind。我想创建一个函数来一遍又一遍地执行此操作,特别是因为将每个文件读入单独的数据帧然后合并是很累的,因为我必须组合 10+。我所有的尝试都没有成功,现在我被卡住了。 :/ 任何帮助,将不胜感激!

【问题讨论】:

  • merge.zoo 支持多路合并,因此如果L 是数据帧列表并且索引始终称为DateTime,则:as.xts(do.call("merge", lapply(L, read.zoo, index = "DateTime", tz = "", format = "%d-%b-%y %H:%M:%S")))

标签: r function xts


【解决方案1】:

如果是list,我们可以使用lapply循环list,并使用匿名函数调用来应用函数

lst2 <- lapply(lst1, function(df) {
     df<-df[!(duplicated(df$DateTime)),]
     xts(df[,-1], order.by = as.POSIXct(df$DateTime, format="%d-%b-%y %H:%M:%S")) 
  })

然后使用Reducemerge

Reduce(merge, lst2)

【讨论】:

  • 谢谢!我让它变得比它需要的复杂得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2014-03-12
相关资源
最近更新 更多