好的,所以我写了一个循环,打算循环的第一部分,执行乘法计算,乘以两列。然后,对于循环的剩余部分,循环将使用与第一个不同的列执行另一个乘法。
多重放映的列是:ocret和clret,它们与响应相乘。
我的代码:
train.set$output[[1]] = if (train.set$response[[1]] == 1) {
apply(train.set[,c('ocret', 'response')], 1, function(x) { (x[1]*x[2])} )
}
for (i in 2:nrow(train.set)){
train.set$output[i] = if(train.set$response[i] == 1) {
apply(train.set[,c('clret', 'response')], 1, function(x) { (x[1]*x[2])})
train.set$output[i-1]
}
}
这个想法首先找到一个响应== 1,它是执行ocret *响应计算。
对于循环的第二部分,它是从第2行开始,以便不覆盖第一部分......并继续循环+1并执行clret *响应计算。
逻辑对我来说很有意义,这几乎是我第一次尝试循环。当我运行代码时,没有任何反应,它没有输出列,任何人都可以给我任何指针吗?我继续阅读它,这是有道理的,不知道我缺少什么,任何解释非常感谢。
下面的示例数据框架和输出:
ocret clret response output
1 0.00730616 0.003382433 0 0
2 -0.084899894 -0.088067766 0 0
3 0.047208568 0.054174679 1 0.047208568
4 -0.002671414 -0.004543992 0 0
5 -0.039943462 -0.040290793 0 0
6 -0.01428499 -0.013506524 0 0
7 -0.037054965 -0.038517845 0 0
8 -0.058027611 -0.057394837 1 -0.058027611
9 -0.004014491 -0.011332705 1 -0.011332705
10 -0.079419682 -0.076167096 1 -0.076167096
11 -0.003424577 -0.011759287 1 -0.011759287
12 0.099260455 0.115800375 1 0.115800375
13 -0.011841897 -0.005322141 1 -0.005322141
14 -0.087230999 -0.090349775 1 -0.090349775
15 0.040570359 0.042507445 1 0.042507445
16 -0.001846555 -0.006212821 1 -0.006212821
17 0.044398056 0.047684898 1 0.047684898
18 -0.025856823 -0.030799705 0 0
19 -0.057677505 -0.061012471 0 0
20 0.010043567 0.012634046 0 0
21 -0.020609404 -0.034511205 0 0
第3行:ocret *回复
第8行:ocret *回复
9到16行:clret * response
答案 0 :(得分:1)
可能不需要For循环。我们可以使用dplyr
和data.table
来获得所需的输出(dt2
)。
library(dplyr)
library(data.table)
dt2 <- dt %>%
mutate(RunID = rleid(response)) %>%
group_by(RunID) %>%
mutate(output = ifelse(response == 0, 0,
ifelse(row_number() == 1, ocret, clret))) %>%
ungroup() %>%
select(-RunID)
dt <- read.table(text = " ocret clret response
1 0.00730616 0.003382433 0
2 -0.084899894 -0.088067766 0
3 0.047208568 0.054174679 1
4 -0.002671414 -0.004543992 0
5 -0.039943462 -0.040290793 0
6 -0.01428499 -0.013506524 0
7 -0.037054965 -0.038517845 0
8 -0.058027611 -0.057394837 1
9 -0.004014491 -0.011332705 1
10 -0.079419682 -0.076167096 1
11 -0.003424577 -0.011759287 1
12 0.099260455 0.115800375 1
13 -0.011841897 -0.005322141 1
14 -0.087230999 -0.090349775 1
15 0.040570359 0.042507445 1
16 -0.001846555 -0.006212821 1
17 0.044398056 0.047684898 1
18 -0.025856823 -0.030799705 0
19 -0.057677505 -0.061012471 0
20 0.010043567 0.012634046 0
21 -0.020609404 -0.034511205 0",
header = TRUE, stringsAsFactors = FALSE)