Wie

2016-07-01 25 views
2

Teil der ID-Funktion von einer Spalte in R extrahieren I-Daten mit rund 10.000 Zeilen wie diese habe:Wie

HH_ID   DEMAND 
201101010000 35090 
201101010030 35612 
201101010100 35245 
201101010130 34161 
201101010200 33156 
201101010230 32556 
...   ... 

wo HH_ID auf die Halbstunde ID bezieht, zB 201.101.010.230 bezieht sich auf Year2011, Data0101 und die Zeit 0230.

ich möchte das Jahr und Datum von HH_ID extrahieren, und die Daten zu haben, wie:

HH_ID   Year_ID Date_ID DEMAND 
201101010000 2011 0101  35090 
201101010030 2011 0101  35612 
201101010100 2011 0101  35245 
201101010130 2011 0101  34161 
...   ... 

Wer weiß, wie dies zu tun?

+0

http://www.stat.berkeley.edu/~s133/dates.html. Dies ist ein guter Anfang, um über die Daten-Zeit-Manipulationen zu lernen – user5249203

+0

Danke, das wird sehr helfen. – Jeannie

Antwort

2

Wir verwenden substring

Year_ID <- substring(df1$HH_ID, 1, 4) 
Date_ID <- substring(df1$HH_ID, 5, 8) 
cbind(df1[1], Year_ID, Date_ID, df1[2]) 
#   HH_ID Year_ID Date_ID DEMAND 
#1 201101010000 2011 0101 35090 
#2 201101010030 2011 0101 35612 
#3 201101010100 2011 0101 35245 
#4 201101010130 2011 0101 34161 
#5 201101010200 2011 0101 33156 
#6 201101010230 2011 0101 32556 

Oder eine andere Option ist sub mit read.table

cbind(df1, read.csv(text=sub("(.{4})(.{4}).*", "\\1,\\2", df1$HH_ID), 
    col.names = c("Year_ID", "Date_ID"), 
    colClasses = c("numeric", "character"), header=FALSE)) 
+1

Es funktioniert! Danke vielmals! – Jeannie

1

I zweite Lösung des akrun mit substring und strtrim (obwohl String wird für beide arbeiten)

mydata$Year_ID<-strtrim(mydata$HH_ID, 4) 
mydata$ Date_ID<-substr(mydata$HH_ID, 5,8) 
mydata<-mydata[,c(1,3,4,2)] 
mydata 

     HH_ID Year_ID Date_ID DEMAND 
201101010000 2011 0101 35090 
201101010030 2011 0101 35612 
201101010100 2011 0101 35245 
201101010130 2011 0101 34161 
201101010200 2011 0101 33156 
201101010230 2011 0101 32556 

Allerdings kann ich Ihr Problem mit der Dateigröße nicht reproduzieren.

for(i in 1:11){ 
    mydata<-rbind(mydata, mydata) 
    } 
nrow(mydata) 
[1] 12288 #larger that your indicated 10000 rows. 

write.csv(mydata,'New_Demand.csv',row.names = F) 
file.size('New_demand.csv')/1000 
[1] 417.8 # in Kilobytes. 
+0

Ich habe gerade festgestellt, dass ich beim Datenexport einen sehr dummen Fehler gemacht habe, danke trotzdem. – Jeannie