2016-04-20 9 views
1

R: Ich habe eine große Binärdatei (numerisch, ein Array) mit readBin in R hochgeladen. Meine Daten aus Werten zusammen größer als 10000 und Werte kleiner als 10000, wieR: Binärdatei in Matrix konvertieren

25685, 5, 6, 2, 1, 5, 46789, 6, 2, 9, 44220, 5, 1, 3, 7, 9, 12, 88952, 6, 8,... 

Wie kann ich die Werte trennen, so dass ich eine Matrix erstellen kann?

1: 25685, 5, 6, 2, 1, 5 

2: 46789, 6, 2, 9 

3: 44220, 5, 1, 3, 7, 9, 12 

Die Trennung sollte zwischen dem letzten kleinen Wert und dem großen Wert wie oben sein.

+0

September <-which(rB> 12000) # Zeitschritte len <-diff (sep, 1) # nacheilt len <-c (len, (Länge (rB) -Schwanz (sep, 1))) # letzten Wert mat <-Matrix (NA, Größe/8,3) # Matrix für (i in 1: Länge (sep)) # die Matrix füllen {mat [sep [i] :(sep [i] + len [i ]), 1] <- i mat [sep [i] :(sep [i] + len [i] -1), 2] <- (1: len [i]) mat [sep [i]: (sep [i] + len [i] -1), 3] <- rB [sep [i] :(sep [i] + len [i] -1)] } –

Antwort

1
name<-file(".dat", "rb") 
size<-(file.info("Path/Name.dat")$size)/8 
rB<-readBin(name, numeric(), size, endian="little") 
size<-length(rB) 
sep<-which(rB>10000) # time steps 
len<-diff(sep,1) # lags 
len<-c(len,(length(rB)-tail(sep,1)+1)) # last value 
mat<-matrix(NA,(size-length(sep)+14),4) # matrix 
for(i in 1:(length(sep))) # fill the matrix 
{ 
mat[sep[i]:(sep[i]+len[i]-2),1]<-i 
mat[(sep[i]):(sep[i]+len[i]-2),2]<-(1:(len[i]-1)) 
mat[(sep[i]):(sep[i]+len[i]-2),3]<-rB[sep[i]]  
mat[(sep[i]):(sep[i]+len[i]-2),4]<-rB[(sep[i]+1):(sep[i]+len[i]-1)] 
} 
mat<-mat[which(!is.na(mat[,1])),]