我有,看起來像一個數據幀:將字符串轉換爲多個二列中的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
所以每一個獨特的名字在弦應該成爲它被視爲/沒見過
我有,看起來像一個數據幀:將字符串轉換爲多個二列中的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
所以每一個獨特的名字在弦應該成爲它被視爲/沒見過
這裏具體日期描述新列的標題是蠻力解決方案:
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
感謝您的建議。看起來第二個循環非常慢(我有64000行)。任何建議如何使其更快? – user2133354 2013-05-01 19:21:16
這裏是完全相同的解決方案,但在adply函數中實現 – 2013-05-01 20:09:39
看到這個問題:http://stackoverflow.com/questions/15905806/improve-text-processing-speed-using-r-and-data-table/16179023#16179023 – eddi 2013-05-01 21:06:42
@eddi你的代碼中的n是什麼?運行sparseMatrix函數時出現錯誤。 – user2133354 2013-05-01 21:45:56
你必須更具體 - 這段代碼適用於我(假設你從那裏的原始問題'dt') – eddi 2013-05-01 21:51:52