2017-07-14 126 views
1

我試圖創建一個單獨的向量(我打算在數據框中以與Excel列類似的方式使用),日期增量爲一天,使用for循環。這個想法是第一次運行在1月1日開始,第二次在1月2日,第二次在1月3日,等等......將日期增量的輸出存儲在for循環中R

我有一個POSIXct變量(rdays),其中包含前45個日期值

[1] "2012-01-01 00:00:00 EST" "2012-01-01 01:00:00 EST" "2012-01-01 02:00:00 EST" 
    [4] "2012-01-01 03:00:00 EST" "2012-01-01 04:00:00 EST" "2012-01-01 05:00:00 EST" 
    [7] "2012-01-01 06:00:00 EST" "2012-01-01 07:00:00 EST" "2012-01-01 08:00:00 EST"... 

我使用下面的for循環來創建這些增量:

for(i in 1:321){ 
    range_days <- rdays + days(i) - days(1) 
    a <- print(range_days) 
    } 

    a # returns only the last iteration (the 321th) 

的想法是一年(從1月1日至2月14日)在以下格式小時步驟的天將所有運行存儲在向量(或列表)中,但我無法找到將它們全部存儲在一起的方法。我需要這種格式的數據,以與Excel中的VLOOKUP類似的方式提取數據以執行額外的計算。

回答

1

這是一個sapply循環使用,是這樣的:

all_results <- sapply(1:321, function(i){ 
    range_days <- rdays + days(i) - days(1) 
    print(range_days) 
    }) 

結果將會對在循環每次迭代的值。

+0

非常感謝。有用。雖然它創建了一個日期 - 數字矩陣,但我能夠以posixct格式將其轉換回單個矢量。這正是我所尋找的...... – madmex

1

如果我們需要使用for創建list並將其分配給值

range_days <- vector("list", 321) 
for(i in seq_len(321)){ 
    range_days[[i]] <- rdays + days(i) - days(1)  
} 

然後,我們轉換listvector(如果需要)由

range_days <- do.call(c, range_days) 
+1

這就像天堂一樣。謝謝!!有沒有辦法讓它在沒有使用for循環的情況下工作? – madmex

1

使用for循環:

創建a作爲循環外的空對象,然後rbind您的res循環內的a存儲所有迭代。

a=NULL 

for(i in 1:321){ 
    range_days <- rdays + days(i) - days(1) 
    a <- rbind(a,range_days) 
} 
+0

謝謝。這創建的是一個數字矩陣,但我需要它們以posixct格式在一個矢量中。我發現了類似的東西,從來沒有能夠任何想法如何到達那裏? 我正在使用類似下面的內容來轉換爲日期但不工作: as.POSIXct(a,format =「%y /%m /%d%H:%M」,origin =「1970-01- 01「,na.rm = TRUE) – madmex