2017-05-04 72 views
-1

創建嵌套功能。例如,我有變數我希望中的R

Store.Number <- c("105, 105, 105, 106, 106, 106, 110, 110, 110, 110") 
Date <- c("2017-01-04", "2016-07-06", "2016-04-04", "2017-01-31", "2016-10-31", 
      "2016-05-11", "2017-01-26", "2016-10-28", "2016-07-20", "2016-04-27") 
Jan012016 <- c("369",NA,NA.......) 
a <- as.Date("01/01/2016", "%m/%d/%Y) 

我想編寫一個函數,使得第一循環還應當檢查

for i=1 
Store.Number[i+1,1] = Store.Number [i,1] 
If "True" 
abs(Date[i,2] - Date[i+1,2]) 
Else 
abs(Date[i,2] - a) 

例如:

Store.Number[2,1] = Store.Number [1,1] > TRUE 
Jan012016 = abs(Date[2,2] - Date[1,2]) 

Else 
Jan012016 = abs(Date[i,2] - a) 
+0

鑑於您的向量之間顯然存在關係,您應該將它們粘貼到data.frame中。 – alistaire

回答

0

在R中最常用的將數據分成子集並執行計算的函數可能是tapplyaggregate。在這種情況下,tapply給出最接近輸出到你想要的東西,所以一個例子是:

Store.Number <- c(105, 105, 105, 106, 106, 106, 110, 110, 110, 110) 
Date <- as.Date(c("2017-01-04", "2016-07-06", "2016-04-04", "2017-01-31", "2016-10-31", 
      "2016-05-11", "2017-01-26", "2016-10-28", "2016-07-20", "2016-04-27"), "%Y-%m-%d") 
a <- as.Date("01/01/2016", "%m/%d/%Y") 

store.diffs <- tapply(Date, Store.Number, function(x)abs(diff(c(a,x)))) 
Jan012016 <- do.call(c,store.diffs) 
names(Jan012016) <- NULL 
Jan012016 
# Time differences in days 
# [1] 369 182 93 396 92 173 391 90 100 84 

請注意,我已經擺脫了報價在你的Store.Number定義,並轉換Date從字符日期。

+0

非常感謝你的工作,我是R新手,因此我認爲這個問題可以通過嵌套循環來解決 – user3301082