[英]How to reduce time instead of using for loop in r as number of rows is in 6 figures
for( i in 1 : nrow(mpa))
{
if( mpa$dte[i] <= 7 & mpa$dte[i]>=0 )
{mpa$Expiryweeknumber[i]= 1 }
if( mpa$dte[i] <= 14 & mpa$dte[i]>=8 )
{mpa$Expiryweeknumber[i]= 2 }
if( mpa$dte[i] <= 21 & mpa$dte[i]>=15 )
{mpa$Expiryweeknumber[i]= 3 }
if( mpa$dte[i] <= 28 & mpa$dte[i]>=22 )
{mpa$Expiryweeknumber[i]= 4 }
if( mpa$dte[i] <= 35 & mpa$dte[i]>=29 )
{mpa$Expiryweeknumber[i]= 5 }
if( mpa$dte[i] <= 42 & mpa$dte[i]>=36 )
{mpa$Expiryweeknumber[i]= 6 }
if( mpa$dte[i] <= 48 & mpa$dte[i]>=43 )
{mpa$Expiryweeknumber[i]= 7 }
if( mpa$dte[i] <= 56 & mpa$dte[i]>=49 )
{mpa$Expiryweeknumber[i]= 8 }
if( mpa$dte[i] <= 63 & mpa$dte[i]>=50 )
{mpa$Expiryweeknumber[i]= 9 }
if( mpa$dte[i] <= 70 & mpa$dte[i]>=64 )
{mpa$Expiryweeknumber[i]= 10 }
if( mpa$dte[i] <= 77 & mpa$dte[i]>=71 )
{mpa$Expiryweeknumber[i]= 11 }
if( mpa$dte[i] <= 84 & mpa$dte[i]>=78 )
{mpa$Expiryweeknumber[i]= 12 }
if( mpa$dte[i]>=78 )
{mpa$Expiryweeknumber[i]= 13 }
}
mpa$Expiryweeknumber <- ifelse(mpa$dte!=0, ceiling(mpa$dte / 7), 1)
這是一個tidyverse
解決方案,您沒有提供任何數據,所以我編造了一些內容並且沒有做所有的打字。 最后一行TRUE ~ 999
對完整性檢查非常有幫助。
library(dplyr)
dte <- sample(0:100, size = 1000, replace = TRUE)
mpa <- data.frame(dte)
mpa %>% mutate(
Expiryweeknumber = case_when(
dte >= 0 & dte <= 7 ~ 1,
dte >= 8 & dte <= 14 ~ 2,
dte >= 15 & dte <= 21 ~ 3,
#### you can add the rest
TRUE ~ 999
)
) %>%
head(15)
#> dte Expiryweeknumber
#> 1 92 999
#> 2 100 999
#> 3 60 999
#> 4 46 999
#> 5 57 999
#> 6 85 999
#> 7 21 3
#> 8 48 999
#> 9 51 999
#> 10 5 1
#> 11 21 3
#> 12 24 999
#> 13 34 999
#> 14 89 999
#> 15 92 999
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.