【问题标题】:R: Looping in R and write result columnwise in other data frameR:在 R 中循环并在其他数据框中按列写入结果
【发布时间】:2017-12-27 09:08:39
【问题描述】:

因为我对 R 还很陌生,所以几天来我一直在努力寻找正确的解决方案。到目前为止,所有的互联网和 stackoverflow 搜索都无法让我领先。 rbind、cbind、lapply、sapply 的所有尝试均无效。那么问题来了:

我在“值 X”列中给出了一个时间序列的数据框 我想计算此列(SMA 和 EMA)上的单一和指数移动平均线。 由于您可以在 SMA/EMA 计算中将参数“n”更改为窗口大小,因此我想在从 5 到 150 以 5 为步长的循环中更改参数。然后将结果写入数据帧。 所以数据框应该是这样的。

SMA_5 | SMA_10 | SMA_15 .... EMA_5 | EMA_10 | EMA_15 ...

理想情况下,列名也在此循环中创建。 你能帮我吗? 提前谢谢你

【问题讨论】:

  • 请分享您的数据摘录(匿名)和您的代码块:stackoverflow.com/help/how-to-ask
  • 正如我已经解释过的,我也尝试了 rbind 等,但在 R 基础中,这是我尝试循环的代码:code k 150){break} } 现在写入数据帧是一团糟.我有 5 或 6 次不同的尝试,我应该全部发布吗?
  • 请不要在cmets中写代码。使用上面的 edit 链接。由于您是作者,因此您可以编辑自己的帖子。请展示,而不是告诉我们您想要做什么以及想要的结果。

标签: r loops dataframe


【解决方案1】:

据我所知,循环在 R 中被视为非最佳解决方案,应尽可能避免。在我看来,内置的 R 函数 sapplycolnames 可以为您的问题提供相当简单的解决方案:

library("TTR")
# example of data
test <- data.frame(moments = 101:600, values = 1:500)
seq_of_windows_size <- seq(from = 5, to = 150, by = 5)
col_names_of_sma <- paste("SMA", seq_of_windows_size, sep = "_")
SMA_columns <- sapply(FUN = function(i) SMA(x = test$values, n = i),
    X = seq_of_windows_size)
colnames(SMA_columns) <- col_names_of_sma

然后您只需将SMA_columns 添加到您的原始数据框中。 EMA 的步骤可能大致相同。 希望,它有帮助:)

【讨论】:

  • 同时,sapply(包装到lapply)是loop
  • 我怀疑有一些陷阱。非常感谢您的链接!
  • @Ekatef:非常感谢。过了一会儿,我现在找到时间回到这个 R 问题。而且效果很好。
  • @Aircan 我很高兴 :) 感谢您的反馈!
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2021-07-29
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多