2015-03-02 60 views
0

我是新的R. 我在.csv格式的表12K行象下面这样:困难算术与时间中的R

St. date  Rgtime RadTime Rain dBZ 
3613006 20130113 0:06:00 0:06:00 2 -10.625 
3613006 20130113 0:16:00 0:16:00 7 -11.75 
3613006 20130113 0:26:00 0:26:00 1 -10.5625 
3613006 20130113 0:36:00 0:36:00 9 -11.28125 
3613006 20130113 0:46:00 0:46:00 3 -10.34375 
3613006 20130113 0:56:00 0:56:00 8 -11.6875 
3613006 20130113 1:06:00 1:06:00 9 -16 
3613006 20130113 1:16:00 1:16:00 6 -25.3125 
3613006 20130113 1:26:00 1:26:00 1 -16.3125 
3613006 20130113 1:36:00 1:36:00 0 -20.71875 

我想补充2列:

1- $ RgTime - 为10分钟RadTimeNew

2-相关DBZ到RadTimeNew AS dBZ.New

预期结果:

St.  date  Rgtime Rain RadTime dBZ  RadTimeNew dBZ.New 
3613006 20130113 0:06:00  2 0:06:00 -10.625  NA   NA 
3613006 20130113 0:16:00  7 0:16:00 -11.75  0:06:00 -10.625 
3613006 20130113 0:26:00  1 0:26:00 -10.5625 0:16:00 -11.75 
3613006 20130113 0:36:00  9 0:36:00 -11.28125 0:26:00 -10.5625 
3613006 20130113 0:46:00  3 0:46:00 -10.34375 0:36:00 -11.28125 
3613006 20130113 0:56:00  8 0:56:00 -11.6875 0:46:00 -10.34375 
3613006 20130113 1:06:00  9 1:06:00 -16   0:56:00 -11.6875 
3613006 20130113 1:16:00  6 1:16:00 -25.3125 1:06:00 -16 
3613006 20130113 1:26:00  1 1:26:00 -16.3125 1:16:00 -25.3125 
3613006 20130113 1:36:00  0 1:36:00 -20.71875 1:26:00 -16.3125 

我试图使用lag(),但我的数据时间不会继续,并有一些错误。所以我正在寻找一个新的脚本来处理这个问题。

在此先感谢。

+0

尝试获取有关POSIXlt更多信息'DF%>%变异(RadTimeNew =滞后(RadTime),dBZ.New =滞后(DBZ))'从'dplyr'包。但要注意'stringsAsFactors = FALSE'设置为读取数据 – DatamineR 2015-03-02 15:04:13

+0

或者使用'library(data.table); setDT(df1)[,c('RadTimeNew','dBZ.New'):= shift(.SD),.SDcols = c(4,6)] []' – akrun 2015-03-02 15:07:46

+0

@RStudent该代码不工作! ! – 2015-03-03 03:05:01

回答

0

您可以使用下面的代码:

df <- within(All.data, { 
    posb <- as.POSIXlt(Rgdate,format="%Y/%m/%d %T") 
    Day <- posb$mday 
    Month <- posb$mon 
    Year <-posb$year 
    hours <- posb$hour 
    mins <- posb$min 
    Seconds <-posb$sec 
    Time <- format(posb, "%T") 
    Date <- format(posb, "%x") 
    posb <- NULL # cleanup 
}) 

此代码将字符串转换为日期和时间,并在结尾处添加新列。只需要从分钟栏到-10分钟。

您可以通过?POSIXlt