【问题标题】:How to extract part of ID feature from one column in R如何从R中的一列中提取部分ID特征
【发布时间】:2016-11-04 02:41:57
【问题描述】:

我有大约 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
...           ...

有人知道怎么做吗?

【问题讨论】:

标签: r export-to-csv data-extraction data-processing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我第二个使用substringstrtrim 的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. 
    

    【讨论】:

    • 刚刚发现导出数据的时候犯了一个很蠢的错误,还是谢谢。
    猜你喜欢
    • 2020-03-20
    • 2016-04-25
    • 2022-01-13
    • 2016-05-15
    • 2012-07-16
    • 2018-10-02
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多