2013-01-14 63 views
3

我有一個較大的數據集(data.table,大約9m行),我想用一列來聚合值(最小值和最大值等)。列是各種其他列的組合,並且具有基於字符串的格式,像下面這樣:根據字符串創建一個唯一的整數

string <- "318XXXX | VNSGN | BIER" 

獲得一些速度執行任務,我想重新編寫這唯一的整數。我定期使用的另一個應用程序處理數據的應用程序具有內置函數,該函數將上面的字符串轉換爲整數(例如73823)。我想知道R中是否有類似的功能?這個想法是,一個特定的字符串總是會導致相同的整數;這將允許它在合併data.tables等使用

這裏data.table列的一個小例子,我想簡單的整數值進行編碼:

sample <- c("318XXXX | VNSGN | BIER", "462XXXX | TZZZH | 9905", "462XXXX | TZZZH | 9905", 
"462XXXX | TZZZH | 9905", "511XXXX | FAWOR | 336H", "511XXXX | FAWOR | 336H", 
"652XXXX | XXXXR | T136", "652XXXX | XXXXR | T136", "672XXXX | BQQSZ | 7777", 
"672XXXX | BQQSZ | 7777") 

我希望能將字符串編碼爲如下所示的表格的附加列;請注意,相同的字符串會產生相同的數字。

String      Number 
318XXXX | VNSGN | BIER  19872 
462XXXX | TZZZH | 9905  78392 
462XXXX | TZZZH | 9905  78392 
462XXXX | TZZZH | 9905  78392 
511XXXX | FAWOR | 336H  23053 
511XXXX | FAWOR | 336H  23053 
652XXXX | XXXXR | T136  95832 
652XXXX | XXXXR | T136  95832 
672XXXX | BQQSZ | 7777  71829 
672XXXX | BQQSZ | 7777  71829 
+5

'?factor'做你要找的東西嗎? – Justin

+2

@Justin:字符串在R中被散列了很長一段時間,所以因素不會更有效率(可能會更慢)。但也許'as.integer(factor(sample))'是OP正在尋找的東西? –

+0

@Justin對我來說,看起來像因素是做一些稍微不同,然後我嘗試做。例如'?factor'包含下面的例子'因子(字母[1:20],labels =「letter」)',它會產生'letter1 letter2(...)letter20'。我在'factor'文檔中錯過了什麼嗎?我添加了一個問題表,表明我試圖完成什麼。感謝您的快速回復。 – Jochem

回答

6

的data.table包會爲你創建索引,而不會讓你處理它們明確,因此會比在問題的方法工作量少。請參閱data.table中的setkey函數。

另外,sqldf包可以使用SQL語句create index按照實例4h中和4i在sqldf home page如能幾乎所有的數據庫包。

+0

因此,當我在我的'data.table'中使用'setkey'時,那麼沒有理由在整數值中自己編碼字符串? – Jochem

+0

對。它已經在引擎蓋下使用索引的想法。 –

相關問題