2017-04-25 61 views
-2

我有817.741交易和12个变量一个买菜的数据集,看起来像这样:加快环data.table

Total_Input[,"Budget_Item"] <- FALSE 

 Date Customer_ID Age_Group Address Product_Subclass Product_ID Quantity Asset Price Price_Per_Unit Profit_Per_Item Budget_Item 
1: 2000-11-01 00:00:00  46855  D  E   110411 4.710085e+12  3 51 57    19    6  FALSE 
2: 2000-11-01 00:00:00  539166  E  E   130315 4.714981e+12  2 56 48    24    -8  TRUE 
3: 2000-11-01 00:00:00  663373  F  E   110217 4.710266e+12  1 180 135   135    -45  TRUE 

我已经初始化变量“预算项目”

现在我想要预算项目为“真”(如果价格 - 资产< 0)。我通过一个for循环做到了这一点,但运行时间很长..任何建议如何做到这一点更多的时间&内存高效?

当前代码回路:

for(i in 1:nrow(Total_Input)){ 
    if(Total_Input$Price[i] - Total_Input$Asset[i] <0){Total_Input$Budget_Item[i] = TRUE} 
} 
+8

'Total_Input $ Budget_Item < - (Total_Input $价格 - Total_Input $资产)<0' – Axeman

+1

@akrun,是我的数据集是data.table,确认。 – Rob

回答

0

由于这是一个data.table,我们可以做

library(data.table) 
Total_Input[, Budget_Item := (Price - Asset) < 0] 

如果缺少在 '价格' 值, '资产',然后我们也可以创造条件

Total_Input[, Budget_Item := ((Price - Asset) < 0) & !is.na(Price - Asset)] 

另外,我们不需要将'Budget_Item'初始化为FALSE。它可以通过列( '价格 - 资产')之差可以直接创建,将其转换为logical ( :=`)创建列

+0

感谢您的建议,非常有帮助。任何评论为什么这个工作更快? – Rob

+0

不知道为什么会发生,因为我upvoted您的建议,我非常感谢您的帮助 – Rob

+0

@Rob你可以编辑你的文章,说你的数据是'data.table'类 – akrun