如何从R中的一列中提取部分ID特征
How to extract part of ID feature from one column in R
我有大约 10,000 行这样的数据:
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
... ...
有人知道怎么做吗?
我们可以使用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
或者另一种选择是 sub
和 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))
我用 substring
和 strtrim
第二个 akrun 的解决方案(尽管子字符串对两者都适用)
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.
我有大约 10,000 行这样的数据:
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
... ...
有人知道怎么做吗?
我们可以使用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
或者另一种选择是 sub
和 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))
我用 substring
和 strtrim
第二个 akrun 的解决方案(尽管子字符串对两者都适用)
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.