Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据单独数据框中的状态确定的数据框子集_R - Fatal编程技术网

R 根据单独数据框中的状态确定的数据框子集

R 根据单独数据框中的状态确定的数据框子集,r,R,我希望任何人都能在这个问题上帮助我。 我有两个示例数据帧: mystatusdate <- as.POSIXct(c("2016-02-01 08:05:16", "2016-02-01 08:12:24", "2016-02-01 08:20:16", "2016-02-01 08:25:09",

我希望任何人都能在这个问题上帮助我。 我有两个示例数据帧:

mystatusdate <- as.POSIXct(c("2016-02-01 08:05:16",
                             "2016-02-01 08:12:24",
                             "2016-02-01 08:20:16",
                             "2016-02-01 08:25:09",
                             "2016-02-01 08:36:22",
                             "2016-02-01 08:44:53",
                             "2016-02-01 08:50:25"),
                           tz="Europe/Berlin",
                           format = '%Y-%m-%d %H:%M:%S')
mystatus <- c(0, 1, 0, 1, 0, 1, 0)
mydf.status <- data.frame(mystatusdate, mystatus)

mytempdate <- as.POSIXct(c("2016-02-01 08:05:35",
                           "2016-02-01 08:09:43",
                           "2016-02-01 08:13:15",
                           "2016-02-01 08:15:16",
                           "2016-02-01 08:17:59",
                           "2016-02-01 08:22:09",
                           "2016-02-01 08:25:17",
                           "2016-02-01 08:28:02",
                           "2016-02-01 08:35:55",
                           "2016-02-01 08:38:32",
                           "2016-02-01 08:41:45",
                           "2016-02-01 08:43:11",
                           "2016-02-01 08:46:27",
                           "2016-02-01 08:48:47",
                           "2016-02-01 08:51:25"),
                         tz="Europe/Berlin",
                         format = '%Y-%m-%d %H:%M:%S')
mytemp <- c(11.4, 11.5, 14.3, 15.1, 15.0, 11.9, 14.1, 15.0, 15.3, 12.1, 12.3, 14.5, 15.1, 14.9, 12.8)
mydf.temp <- data.frame(mytempdate, mytemp)
上面的代码创建mydf.status,它是一个状态为“1”或“0”的不规则时间序列,以及mydf.temp,它包含也具有不规则时间序列的温度值。这两个时间序列是不同的

现在,我想在此基础上创建一个新的数据框,其中有mydf.temp数据框的一个子集,但只包含mydf.status显示状态为“1”的时间范围内的行。 所以结果应该是这个数据框:

myresultdate <- as.POSIXct(c("2016-02-01 08:13:15",
                             "2016-02-01 08:15:16",
                             "2016-02-01 08:17:59",
                             "2016-02-01 08:25:17",
                             "2016-02-01 08:28:02",
                             "2016-02-01 08:35:55",
                             "2016-02-01 08:46:27",
                             "2016-02-01 08:48:47"),
                           tz="Europe/Berlin",
                           format = '%Y-%m-%d %H:%M:%S')
myresulttemp <- c(14.3, 15.1, 15.0, 14.1, 15.0, 15.3, 15.1, 14.9)
mydf.resulttemp <- data.frame(myresultdate, myresulttemp)

非常感谢您的帮助

您可以使用
dplyr
以间隔过滤温度时间序列:

library(dplyr)

mydf.temp$mystatus <- 1

mydf.status %>% 
mutate(dateend = lead(mystatusdate)) %>% 
inner_join(mydf.temp, by = "mystatus") %>% 
filter(mytempdate > mystatusdate & mytempdate <= dateend) %>% 
select(mytempdate, mytemp)

#>            mytempdate mytemp
#> 1 2016-02-01 08:13:15   14.3
#> 2 2016-02-01 08:15:16   15.1
#> 3 2016-02-01 08:17:59   15.0
#> 4 2016-02-01 08:25:17   14.1
#> 5 2016-02-01 08:28:02   15.0
#> 6 2016-02-01 08:35:55   15.3
#> 7 2016-02-01 08:46:27   15.1
#> 8 2016-02-01 08:48:47   14.9
库(dplyr)
mydf.temp$mystatus%
突变(dateend=lead(mystatusdate))%>%
内部联接(mydf.temp,by=“mystatus”)%>%
过滤器(mytempdate>mystatusdate和mytempdate%
选择(mytempdate、mytemp)
#>mytempdate mytemp
#> 1 2016-02-01 08:13:15   14.3
#> 2 2016-02-01 08:15:16   15.1
#> 3 2016-02-01 08:17:59   15.0
#> 4 2016-02-01 08:25:17   14.1
#> 5 2016-02-01 08:28:02   15.0
#> 6 2016-02-01 08:35:55   15.3
#> 7 2016-02-01 08:46:27   15.1
#> 8 2016-02-01 08:48:47   14.9

非常好的解决方案!我以前从未使用过
dplyr
软件包。必须了解更多信息。。。
ggplot() + 
geom_step(data=mydf.status, aes(x=mystatusdate, y=mystatus), direction = "hv") +
geom_line(data=mydf.temp, aes(x=mytempdate, y=mytemp), colour = "red") +
geom_point(data=mydf.resulttemp, aes(x=myresultdate, y=myresulttemp), colour = "blue")
library(dplyr)

mydf.temp$mystatus <- 1

mydf.status %>% 
mutate(dateend = lead(mystatusdate)) %>% 
inner_join(mydf.temp, by = "mystatus") %>% 
filter(mytempdate > mystatusdate & mytempdate <= dateend) %>% 
select(mytempdate, mytemp)

#>            mytempdate mytemp
#> 1 2016-02-01 08:13:15   14.3
#> 2 2016-02-01 08:15:16   15.1
#> 3 2016-02-01 08:17:59   15.0
#> 4 2016-02-01 08:25:17   14.1
#> 5 2016-02-01 08:28:02   15.0
#> 6 2016-02-01 08:35:55   15.3
#> 7 2016-02-01 08:46:27   15.1
#> 8 2016-02-01 08:48:47   14.9