【发布时间】:2024-01-19 15:51:01
【问题描述】:
我还没有找到解决 R 中的编码难题的正确方法,希望得到您的帮助。
首先,这是我的大型数据集的一个可重现的小示例:
data <- data.frame(
Date <- sample(c("8/7/2014 23:01", "8/8/2014 10:01", "8/7/2014 11:01", "8/7/2014 12:01", "8/7/2014 13:01")),
`361` <- sample(c("0.035", "0.039", "0.032", "0.042", "0.033")),
`362` <- sample(c("0.038", "0.043", "0.054", "0.023", "0.076")),
`363` <- sample(c("0.038", "0.040", "0.040", "0.020", "0.083")))
我有数百列随后增加的数字,多年来每小时有数千行。
我想要创建一个新的时间序列,为每个列组合采用标准化差异索引 (NDI)。作为参考,NDI 公式为:NDI(a:b) = (x-y)/(x+y)。例如,NDI(361:362) = (xy)/(x+y),并且仅使用第一个日期 8/7/2014 23:01 的值,它将是 NDI(361:362) = (0.035-0.038)/(0.035+0.038) = -0.041。
现在,我想创建一个循环来自动计算 NDI(361:363)、NDI(362:363) 等的所有其余日期和列,输出将放置在其中在新的数据框中。
我们将不胜感激。
感谢您的时间和努力!
【问题讨论】:
-
在创建循环之前,公式的 R 代码是什么样的?此外,您的可重现示例的代码存在问题。您正在使用
sample(),它会创建所提供上下文的随机排列(即,每次运行它都会有所不同,除非您包含种子(例如,set.seed(1)))。我建议删除sample()函数并将data.frame()中的<-更改为=,因为<-正在将值保存到全局环境中。
标签: r loops automation time-series