R

时间:2015-05-19 23:12:17

标签: r datetime dataframe subset

我是R的新手,所以这可能是一个简单的问题,但这给我带来了很多困难。

我正在尝试在数据帧中找到的两个值之间进行子集化,并且在尝试在这两个值之间进行子集时遇到了困难。我将首先描述我做了什么,做了什么,然后做了什么。

我有两个数据框。一个有一系列风暴数据,包括风暴事件的日期,另一个有一系列数据对应于数千个监测事件的放电。我试图查看风暴事件开始和结束日期/时间内是否有任何排放数据。

到目前为止,我所做的工作如下:

放电数据示例:

    X.  DateTime        Depth   DateTime1           newcol
1   3   8/2/2013 13:15  0.038   2013-08-02 13:15:00 1375463700
2   4   8/2/2013 13:30  0.038   2013-08-02 13:30:00 1375464600
3   5   8/2/2013 13:45  0.039   2013-08-02 13:45:00 1375465500
4   6   8/2/2013 14:00  0.039   2013-08-02 14:00:00 1375466400

示例风暴数据:

    Storm newStart  newEnd
1   1   1382125500  1382130000
2   2   1385768100  1385794200

#Make a value to which the csv files are attached
CA_Storms <- read.csv(file = "CA_Storms.csv", header = TRUE, stringsAsFactors = FALSE)
CA_adj <- read.csv(file = "CA_Adj.csv", header = TRUE, stringsAsFactors = FALSE)

#strptime function (do this for all data sets)
CA_adj$DateTime1 <- strptime(CA_adj$DateTime, format = "%m/%d/%Y %H:%M")
CA_Storms$Start.time1 <- strptime(CA_Storms$Start.time, format = "%m/%d/%Y %H:%M")
CA_Storms$End.time1 <- strptime(CA_Storms$End.time, format = "%m/%d/%Y %H:%M")

#Make dates and times continuous
CA_adj$newcol <- as.numeric(CA_adj$DateTime1)
CA_Storms$newStart <- as.numeric(CA_Storms$Start.time1)
CA_Storms$newEnd <- as.numeric(CA_Storms$End.time1)

这允许我成功完成以下子集:

    CA_adj[CA_adj$newcol == "1375463700", ]

Example output:   
 X.       DateTime Depth           DateTime1     newcol
    1  3 8/2/2013 13:15 0.038 2013-08-02 13:15:00 1375463700

CA_adj[CA_adj$newcol == CA_Storms[1,19], ]

 X.       DateTime         Depth  DateTime1           newcol
7403 7408 10/18/2013 15:45 0.058 2013-10-18 15:45:00 1382125500

CA_adj[CA_adj$newcol <= CA_Storms[1,20], ]

但是,每当我尝试让它在两个值之间移动时,例如:

CA_adj[CA_adj$newcol >= CA_Storms[1,19] & CA_adj$newol <= CA_Storms[1,20], ]

它回应:

[1] X.        DateTime  Depth     DateTime1 newcol   
<0 rows> (or 0-length row.names)

我知道这个输出不正确,因为通过粗略查看我的大数据集,至少有一个值属于这些标准。

是什么给出的?

1 个答案:

答案 0 :(得分:0)

discharge<-data.frame( x=c(3,4,5,6),
                       DateTime=c("8/2/2013 13:15","8/2/2013 13:30",
                                  "8/2/2013 13:45","8/2/2013 14:00"),
                       Depth=c(0.038, 0.038, 0.039, 0.039)
                     ) 
 discharge$DateTime1<- as.POSIXct(discharge$DateTime, format = "%m/%d/%Y %H:%M")

storm<-data.frame( storm=c(1,2),
                   start=c("8/2/2013 13:15","8/2/2013 16:30"),
                   end=c("8/2/2013 13:45","8/2/2013 16:45")
                 )

 storm$start<- as.POSIXct(storm$start, format = "%m/%d/%Y %H:%M")
 storm$end<- as.POSIXct(storm$end, format = "%m/%d/%Y %H:%M")


discharge[(discharge$DateTime1>=storm[1,2] & discharge$DateTime1<=storm[1,3]),]