2017-05-04 56 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