2016-08-18 104 views
1

我有一列,並在該列中,我有大約5-10個實例每個數十萬個不同的字符串。我想統計他們,然後把計數放入相應的行中。所以我這樣做:ddply內存要求,解決方案

newdf <- ddply(oldDF, ~BigVariable, transform, counts = length(BigVariable)) 

這工作正常,直到我開始接近100萬行/ 1GB文件大小。 每次使用此大小或更大的數據集時,我的R會話都會發生致命錯誤。然而,28GB的空閒內存,我不明白爲什麼這應該是一個問題,但我從this thread的理解是,ddply有時可以是一個記憶豬。

雖然我很確定這是一個內存問題,因爲在我的系統監視器發生崩潰之前,我看到修改過的內存和正在使用的內存與空閒內存之間的爭鬥,直到綠色條成功並取最後一位, R在同一時刻崩潰。

  • 我已經做了顯而易見的和使用data.table更有效的內存使用。
  • 在一個變量中有大量的因素。我試圖將冒犯變量改爲角色,希望它能更好地使用data.table,但沒有骰子。

我還應該嘗試什麼?是否有更高效的內存方法來獲取這些計數並將其放入所有適當的行中?

回答

2

dplyrddply的更好替代方案,因爲它可以更高效。

library(dplyr) 
oldDF %>% 
    group_by(BigVariable) %>% 
    mutate(counts = n()) 

或用data.table

library(data.table) 
setDT(oldDF)[, counts := .N, by = BigVariable] 
+0

第一個解決方案沒有崩潰完成,但給了我一個NULL。第二個似乎運作良好。現在,看看我可以推送這個數據集有多大。謝謝! – Thoughtcraft

+1

@JamesHanks NULL輸出令人困惑。你有沒有嘗試過一個新的會議。 – akrun

+1

現在他們都工作。謝謝! – Thoughtcraft