2017-04-25 64 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