我有,看起来像一个数据帧:将字符串转换为多个二列中的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