如何从R中的一列中提取部分ID特征

如何从R中的一列中提取部分ID特征,r,export-to-csv,data-extraction,data-processing,R,Export To Csv,Data Extraction,Data Processing,我有大约10000行的数据,如下所示: HH_ID DEMAND 201101010000 35090 201101010030 35612 201101010100 35245 201101010130 34161 201101010200 33156 201101010230 32556 ... ... 其中,HH_ID指半小时ID,例如201101010230指2011年、Data0101和时间0230 我想从HH_ID中提取年份和日期,并

我有大约10000行的数据,如下所示:

HH_ID         DEMAND
201101010000  35090
201101010030  35612
201101010100  35245
201101010130  34161
201101010200  33156
201101010230  32556
...           ...
其中,HH_ID指半小时ID,例如201101010230指2011年、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
...           ...

有人知道怎么做吗?

我们可以使用
子字符串

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

我用
子字符串和
strtrim
支持akrun的解决方案(尽管子字符串对这两个都有效)


mydata$Year\u ID。这是了解数据时间操作的一个良好开端。谢谢,这将非常有帮助。我刚刚发现我在导出数据时犯了一个非常愚蠢的错误,无论如何,谢谢。
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))
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.