1

我有一个看起来像这样的数据框:

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

所以字符串中的每个唯一名称都应该成为一个新列的标题,描述它在什么日期被看到/没有看到

4

1 回答 1

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
于 2013-05-01T18:42:07.130 回答