簡體   English   中英

由於行數為 6 位數,如何在 r 中減少時間而不是使用 for 循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM