R 编程,For 循环,if else 语句不返回中位数的正确计算
R programming, For loop, if else statement not returning correct calculation of median number
我有一个大数据框摘要2,包含不同的关键字,每个关键字的日期为 2016-2020 年。
所以我为每家公司创建了一个循环,所以每当它在数据框中到达 2016 年时,它应该从 if 循环开始。奇怪的是,在第 269 行到达公司 2 时没有正确返回中位数。因为我使用的中位数需要 -4 周和 +3 周的命中。第一个日期必须使用 if 语句,以仅计算可用日期。
我正在使用下面的代码,但中位数在 else 语句中无法正常工作。
然而 summary2$test & test2 返回了正确的数字,那么为什么 median(summary2$hits[i-4:i+3]) 没有返回正确的数字?
如果我手动使用 summary2$test 和 summary2$test 数字作为中位数,它 returns 正确的数字。
代码
for (i in 1:nrow(summary2)) {
if (summary2$date[i] < as.Date('2016-01-31')) {
summary2$median[i] = median(summary2$hits[i:i+3])
}
else {
summary2$median[i] = median(summary2$hits[i-4:i+3])
summary2$test[i] = i-4
summary2$test2[i] = i+3
}
}
数据框:
line
keyword
hits
date
company
median
test
test2
1
apple
32
2016-01-03
apple
30.0
NA
NA
2
apple
30
2016-01-10
apple
28.0
NA
NA
3
apple
29
2016-01-17
apple
29.0
NA
NA
4
apple
30
2016-01-24
apple
31.0
NA
NA
5
apple
28
2016-01-31
apple
29.5
1
8
6
apple
29
2016-02-07
apple
29.0
2
9
523
icloud
72
2016-01-03
apple
65
NA
NA
524
icloud
69
2016-01-10
apple
66
NA
NA
525
icloud
66
2016-01-17
apple
62
1
8
526
icloud
65
2016-01-24
apple
66
NA
NA
527
icloud
66
2016-01-31
apple
28
523
530
528
icloud
62
2016-02-07
apple
28
524
531
529
icloud
66
2016-02-14
apple
28
525
532
530
icloud
66
2016-02-21
apple
28
526
533
看起来第 525 行也有一些错误。
我认为你应该在使用:
时使用()
,例如
for (i in 1:nrow(summary2)) {
if (summary2$date[i] < as.Date('2016-01-31')) {
summary2$median[i] = median(summary2$hits[i:(i+3)])
}
else {
summary2$median[i] = median(summary2$hits[(i-4):(i+3)])
summary2$test[i] = i-4
summary2$test2[i] = i+3
}
}
我有一个大数据框摘要2,包含不同的关键字,每个关键字的日期为 2016-2020 年。 所以我为每家公司创建了一个循环,所以每当它在数据框中到达 2016 年时,它应该从 if 循环开始。奇怪的是,在第 269 行到达公司 2 时没有正确返回中位数。因为我使用的中位数需要 -4 周和 +3 周的命中。第一个日期必须使用 if 语句,以仅计算可用日期。
我正在使用下面的代码,但中位数在 else 语句中无法正常工作。 然而 summary2$test & test2 返回了正确的数字,那么为什么 median(summary2$hits[i-4:i+3]) 没有返回正确的数字? 如果我手动使用 summary2$test 和 summary2$test 数字作为中位数,它 returns 正确的数字。
代码
for (i in 1:nrow(summary2)) {
if (summary2$date[i] < as.Date('2016-01-31')) {
summary2$median[i] = median(summary2$hits[i:i+3])
}
else {
summary2$median[i] = median(summary2$hits[i-4:i+3])
summary2$test[i] = i-4
summary2$test2[i] = i+3
}
}
数据框:
line | keyword | hits | date | company | median | test | test2 |
---|---|---|---|---|---|---|---|
1 | apple | 32 | 2016-01-03 | apple | 30.0 | NA | NA |
2 | apple | 30 | 2016-01-10 | apple | 28.0 | NA | NA |
3 | apple | 29 | 2016-01-17 | apple | 29.0 | NA | NA |
4 | apple | 30 | 2016-01-24 | apple | 31.0 | NA | NA |
5 | apple | 28 | 2016-01-31 | apple | 29.5 | 1 | 8 |
6 | apple | 29 | 2016-02-07 | apple | 29.0 | 2 | 9 |
523 | icloud | 72 | 2016-01-03 | apple | 65 | NA | NA |
524 | icloud | 69 | 2016-01-10 | apple | 66 | NA | NA |
525 | icloud | 66 | 2016-01-17 | apple | 62 | 1 | 8 |
526 | icloud | 65 | 2016-01-24 | apple | 66 | NA | NA |
527 | icloud | 66 | 2016-01-31 | apple | 28 | 523 | 530 |
528 | icloud | 62 | 2016-02-07 | apple | 28 | 524 | 531 |
529 | icloud | 66 | 2016-02-14 | apple | 28 | 525 | 532 |
530 | icloud | 66 | 2016-02-21 | apple | 28 | 526 | 533 |
看起来第 525 行也有一些错误。
我认为你应该在使用:
时使用()
,例如
for (i in 1:nrow(summary2)) {
if (summary2$date[i] < as.Date('2016-01-31')) {
summary2$median[i] = median(summary2$hits[i:(i+3)])
}
else {
summary2$median[i] = median(summary2$hits[(i-4):(i+3)])
summary2$test[i] = i-4
summary2$test2[i] = i+3
}
}