我想计算我所拥有的产品列表中的每周价格变化,但我甚至在提取价值方面遇到了问题。 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循环的任何想法,或者是否有更好的方法让我这样做?感谢
答案 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
)