我已经构建了一组天气预测指标,我想通过在R中使用不同的集合来回测我的算法。虽然我有一些使用数据表进行合并的经验但我无法找到一种方法来做这个特定的任务。这是我数据的一部分
Time TempC Index1 Index2 Index3 Index4
1 25.0 Up Down Down Down
2 25.2 Up Up Up Down
3 25.6 Up Up Up Up
4 25.0 Down Down Down Up
5 24.7 Down Down Down Down
6 23.6 Down Down Down Down
7 28.9 Up Up Up Down
8 30.0 Up Up Up Up
理想情况下,我会选择一组指标,比如说Index1和Index2,并根据Up和Down信号的第一个和最后一个实例计算差异。例如,当将Index1作为唯一预测变量时;
Time TempC TempDiff
1,3 25.0, 25.6 0.6
4,6 25.0, 23.6 1.4
7,8 28.9, 30.0 1.1
同时服用Index1和Index2;
Time TempC TempDiff
2,3 25.2, 25.6 0.4
4,6 25.0, 23.6 1.4
7,8 28.9, 30.0 1.1
对我来说最重要的是差异。用逗号连接起始和结束温度和时间刻度是完全可选的。任何帮助将不胜感激。
修改
我很想知道是否有任何方法可以忽略不符合以下两个或多个索引的标准的中间值集合;
Time TempC Index1 Index2 Index3 Index4
1 25.0 Up Down Down Down
2 25.2 Up Up Up Down
3 25.6 Up Up Up Up
4 25.0 Down Down Down Up
5 24.7 Down Down Down Down
6 23.6 Down Down Down Down
7 28.9 Up Up Up Down
8 29.3 Up Down Down Down
9 30.0 Up Up Up Up
使用Index1和Index2时,上面所需的结果是忽略第8行,通常用第7行和第9行计算差值。
最后,添加另一个指示方向(向上或向下)的列将是有用的,这将让我量化模型的可靠性,如此
Time TempC TempDiff Direction
2,3 25.2, 25.6 0.4 Up
4,6 25.0, 23.6 -1.4 Down
7,8 28.9, 30.0 1.1 Up
答案 0 :(得分:3)
使用dplyr和data.table的解决方案。
public void foo(List configs){
//configs type cast code
configs.forEach(config -> {
String value = config.getValue();
});
}
如果要考虑多个列,可以为library(dplyr)
library(data.table)
dat2 <- dat %>%
# Create Run Length ID
mutate(ID = rleid(Index1)) %>%
group_by(ID) %>%
# Filter groups with n > 1
filter(n() > 1) %>%
# Summarise the data by first and last value of each group
summarise(Time = paste(first(Time), last(Time), sep = ", "),
TempRange = paste(first(TempC), last(TempC), sep = ", "),
TempDiff = abs(first(TempC) - last(TempC))) %>%
ungroup() %>%
select(-ID)
dat2
# # A tibble: 3 x 3
# Time TempRange TempDiff
# <chr> <chr> <dbl>
# 1 1, 3 25, 25.6 0.600
# 2 4, 6 25, 23.6 1.40
# 3 7, 8 28.9, 30 1.10
函数提供多个列。
rleid