如何为for循环

时间:2017-03-25 13:13:42

标签: r for-loop

我想计算我所拥有的产品列表中的每周价格变化,但我甚至在提取价值方面遇到了问题。 df1是产品列表和我感兴趣的日期,df2是所有产品的价格历史记录。我想为df1添加一个新列,其中%价格变化为1周(df1中距离日期为1周)

df1:                
Item    Date       1W Px Change
A       1/1/17     
B       2/1/17
A       2/2/17
C       2/2/17
D       3/1/17

df2:
Date      A    B    C    D
1/1/17    1    5    10   50
1/2/17    2    5    9    40
1/3/17    3    5    10   42

数据框有数千种产品和日期。我尝试使用for loop创建一个新的向量,其中仅包含df1中当天的价格,但收到replacement has length zero错误。

price <- rep(NA,nrow(df1))
for(i in 1:nrow(df1)){
    price[i] <- df2[which(df2$Date==df1$Date[i]),df1$Item[i]]
  }  

有关如何修复for循环的任何想法,或者是否有更好的方法让我这样做?感谢

1 个答案:

答案 0 :(得分:1)

这种方法存在一些可能的问题。第一个问题可能是比较时间。检查两个表中是否确实有相同的时间格式,并按照您的预期进行比较。

其次,你不要认为NULL被退回。试试这个修改

for(i in 1:nrow(df1)){
   value <- df2[which(df2$Date==df1$Date[i]), df1$Item[i]]
   if(!is.null(value)) price[i] <- value 
}

最后,检查您是df$Item作为角色而不是因素。否则,您可能会得到奇怪的结果(df1$Item[i]中的因子将返回为Int,而不是char