2016-07-01 19 views
2

提取ID功能的一部分,我已經擁有超過10,000行這樣得到的數據:如何從一列中的R

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

其中HH_ID指的是每半小時ID,如201101010230指Year2011,Data0101和時間0230.

我想從HH_ID提取年份和日期,並有類似的數據:

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

有誰知道如何做到這一點?

+0

http://www.stat.berkeley.edu/~s133/dates.html。這是瞭解數據時間操作的好開始 – user5249203

+0

謝謝,這將有很大的幫助。 – Jeannie

回答

2

我們可以使用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 

或者另一種選擇是subread.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

它的工作原理!非常感謝! – Jeannie

1

我第二akrun與substring解決方案和strtrim(雖然子將兩個工作)

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 

但是我不能用文件大小重現您的問題。

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

我剛剛發現我在導出數據時犯了一個非常愚蠢的錯誤,無論如何。 – Jeannie