Kod nedan. (Skönhetsupplevelse utlovas ej!)
data.to.columns<-function(Oldcol, Separators){
antal<-nchar(as.character(Oldcol), type="chars")
maxantal<-max(antal)
tempframe<-as.data.frame(matrix(NA,length(Oldcol),maxantal))
new.col<-as.data.frame(matrix(0,length(Oldcol),maxantal))
col.assign<-as.data.frame(matrix(0,length(Oldcol),maxantal))
for (i in 1:maxantal){
tempframe[antal>=i,i]<-substr(Oldcol[antal>=i],i,i)
for (separators in 1:length(Separators)){
new.col[!is.na(tempframe[,i])&tempframe[,i]==Separators[separators],i]<-1
}
if (i==1){
col.assign[!is.na(tempframe[,i]),i]<-1}
if (i>1){
col.assign[!is.na(tempframe[,i]),i]<-new.col[!is.na(tempframe[,i]),i]+col.assign[!is.na(tempframe[,i]),i-1]}
}
for (i in 1:maxantal){
col.assign[new.col[,i]==1,i]<-0
}
n.new.col<-max(apply(new.col,1,sum))+1
new.data<-matrix("",length(Oldcol),n.new.col)
for (columns in 1:n.new.col){
for (i in 1:maxantal){
new.data[col.assign[,i]==columns,columns]<-(paste(new.data[col.assign[,i]==columns,columns],tempframe[col.assign[,i]==columns,i], sep=""))
}
}
new.columns<-as.data.frame(new.data)
return(new.columns)
}
Exempel:
testdata<-c("NA","34+15+Okänt","45+35+NA+17", "2+4", "35 NA" )
data.to.columns(Oldcol=testdata, Separators=c("+"," "))
Inga kommentarer:
Skicka en kommentar