2013-05-01 59 views
1

我有,看起來像一個數據幀:將字符串轉換爲多個二列中的R

Date   Names 
1/1/2000  A|B 
2/3/2003  A|C|D 
2/4/2004  B|C|E 

我需要將其轉換爲:

Date   A B C D E 
1/1/2000  1 1 0 0 0 
2/3/2003  1 0 1 1 0 
2/4/2004  0 1 1 0 1 

所以每一個獨特的名字在弦應該成爲它被視爲/沒見過

+0

看到這個問題:http://stackoverflow.com/questions/15905806/improve-text-processing-speed-using-r-and-data-table/16179023#16179023 – eddi 2013-05-01 21:06:42

+0

@eddi你的代碼中的n是什麼?運行sparseMatrix函數時出現錯誤。 – user2133354 2013-05-01 21:45:56

+0

你必須更具體 - 這段代碼適用於我(假設你從那裏的原始問題'dt') – eddi 2013-05-01 21:51:52

回答

1

這裏具體日期描述新列的標題是蠻力解決方案:

library(plyr) 

fun.2 = function (x) { 
     x[which(!is.na(match(names(x),strsplit(as.character(x[[2]]),'')[[1 ]][seq(1,length(strsplit(as.character(x[[2]]),'')[[1]]),by=2)])))] = 1 
     return(x) 
     } 
myfunction = function (df) { 
    df1 = cbind(df,A=rep(0,nrow(df)),B=rep(0,nrow(df)),C=rep(0,nrow(df)),D=rep(0,nrow(df)),E=rep(0,nrow(df))) 
    df2 = adply (df1,1,fun.2) 
    return(df2) 
} 

# you can run 

myfunction (df) 

     Date Names A B C D E 
1 1/1/2000 A|B 1 1 0 0 0 
2 2/3/2003 A|C|D 1 0 1 1 0 
3 2/4/2004 B|C|E 0 1 1 0 1 
+0

感謝您的建議。看起來第二個循環非常慢(我有64000行)。任何建議如何使其更快? – user2133354 2013-05-01 19:21:16

+0

這裏是完全相同的解決方案,但在adply函數中實現 – 2013-05-01 20:09:39