【问题标题】:R programming, For loop, if else statement not returning correct calculation of median numberR编程,For循环,if else语句未返回中位数的正确计算
【发布时间】:2021-03-19 12:51:04
【问题描述】:

我有一个大数据框摘要2,其中包含不同的关键字,每个关键字的日期为 2016-2020 年。 所以我为每家公司创建了一个循环,所以每当它在数据框中到达 2016 年时,它应该从 if 循环开始。奇怪的是,在第 269 行到达公司 2 时,中值没有正确返回。因为我使用的中值需要 -4 周和 +3 周的命中。第一个日期必须使用 if 语句,以仅计算可用日期。

我正在使用下面的代码,但中值在 else 语句中无法正常工作。 然而,summary2$test & test2 返回了正确的数字,那么为什么中位数(summary2$hits[i-4:i+3])没有返回正确的数字? 如果我手动使用 summary2$test 和 summary2$test 数字作为中位数,它会返回正确的数字。

代码

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 行也有一些错误。

【问题讨论】:

    标签: r for-loop if-statement median


    【解决方案1】:

    我认为你应该在使用:时使用(),例如,

    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
      }
      
    }
    

    【讨论】:

    • 太棒了,它有效。非常感谢你。我永远也想不通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多