2015-04-06 48 views
3

虛列我想創建一個虛擬numeric柱與存在character列映射1-1運行correlation[R data.table創建該地圖存在的列

我的表是這樣的:

Code 
US 
UK 
VN 
US 
VN 
UK 

我希望能有新的列dummyUS, UK, VN1, 2, 3

Code  dummy 
US  1 
UK  2 
VN  3 
US  1 
VN  3 
UK  2 

希望地圖, meone可以幫助!

+1

那你試試?解釋代碼的一部分。所以這裏的人們可以知道你沒有得到結果的地方。 – 2015-04-06 10:45:00

回答

2

這可以或者通過Code柱規定爲Codeunique元件levels轉換爲factor類和將其轉換回numeric和分配(:=)到dummy

library(data.table) 
DT[, dummy:=as.numeric(factor(Code, levels=unique(Code)))][] 
#  Code dummy 
#1: US  1 
#2: UK  2 
#3: VN  3 
#4: US  1 
#5: VN  3 
#6: UK  2 

或者使用match '代碼'與unique元素之間'代碼'

DT[, dummy:= match(Code, unique(Code))] 

或者chmatchdata.table

DT[, dummy:= chmatch(Code, unique(Code))] 
+0

我檢查了2個方法,我發現'match'方法好得多 – 2015-04-06 11:24:58

5

或者你可以簡單地使用內置的.GRP功能

DT[, dummy := .GRP, by = Code][] 
# Code dummy 
# 1: US  1 
# 2: UK  2 
# 3: VN  3 
# 4: US  1 
# 5: VN  3 
# 6: UK  2 
+1

@DavidArenburg,從R基的'match'使用下面的散列表。從我的基準測試來看,它非常高效,但不會比'chmatch'或dt的分組速度更快。# – Arun 2015-04-06 11:56:14

+1

@DavidArenburg對於'.GRP','system.time'比1e6數據集上的'chmatch'好得多。 – akrun 2015-04-06 11:58:52