2016-02-07 35 views
0

我試圖創建字符串year,month幾年(從199701到200612)。我可以使用for循環,有沒有辦法做到這一點,而不使用循環?如何將字符串連接爲年份月份而不使用for循環

我的目標:

#1997 01 to 2006 12 
199701 
199702 
199703 
199704 
199705 
199706 
199707 
199708 
199709 
199710 
199711 
199712 
199801 
..... 
+0

爲什麼řü這樣的非循環溶液後? – Trix

+1

我認爲R的「最佳實踐」之一是避免循環 – Rilcon42

回答

1

這應該工作

`dim<-`(outer(1997:2006,sprintf("%02d", 1:12),paste0),NULL) 
+1

不知道爲什麼這會得到downvoted(因爲它是一個合法的答案)。無論如何,加1 – akrun

+0

或者,'sort(as.vector(outer(1997:2006,1:12,sprintf,fmt =「%4i%02i」)))' – Uwe

0

我們也可以使用expand.grid

do.call(paste, c(expand.grid(1997:2006, sprintf('%02d', 
      1:12)), sep='')) 
1

另一種選擇:

paste0(rep(1997:2006, each=12), sprintf("%02d", 1:12)) 
+0

或'sprintf(「%4d%02d」 ,代表(1997:2006,每個= 12),1:12) – Uwe

0

已發佈迄今爲止所有答案都包含單獨致電paste()sprintf()而不是一個致電sprintf()

溶液下面是使用CJ()交叉連接)從data.table包功能:

library(data.table) 
CJ(1997:2006, 1:12)[, sprintf("%4i%02i", V1, V2)] 
[1] "199701" "199702" "199703" "199704" "199705" "199706" "199707" "199708" "199709" "199710" 
[11] "199711" "199712" "199801" "199802" "199803" "199804" "199805" "199806" "199807" "199808" 
[21] "199809" "199810" "199811" "199812" "199901" "199902" "199903" "199904" "199905" ... 
相關問題