Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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 如何将每5个连续值重塑为一行并追加datetime?_R_Date_Matrix - Fatal编程技术网

R 如何将每5个连续值重塑为一行并追加datetime?

R 如何将每5个连续值重塑为一行并追加datetime?,r,date,matrix,R,Date,Matrix,我有一个传感器,每秒记录一些值,其中5个值的系列是一个测量值 以下是示例数据: sensor<-c(1,2,3,4,5,1.1,2.1,3.2,4.2,5.1,1.2,2.2,3.1,4.3,5.4,1.1,2.22,3.3,4.9,5.55) clock<-seq(from=as.POSIXct("2010-03-01 13:02:00"),to=as.POSIXct("2010-05-05 13:10:00"),by="1 sec") time<-clock[1

我有一个传感器,每秒记录一些值,其中5个值的系列是一个测量值

以下是示例数据:

  sensor<-c(1,2,3,4,5,1.1,2.1,3.2,4.2,5.1,1.2,2.2,3.1,4.3,5.4,1.1,2.22,3.3,4.9,5.55)
  clock<-seq(from=as.POSIXct("2010-03-01 13:02:00"),to=as.POSIXct("2010-05-05 13:10:00"),by="1 sec")
  time<-clock[1:length(sensor)]
  orig<-data.frame(sensor,time)
  orig

     sensor          time
1    1.00 2010-03-01 13:02:00
2    2.00 2010-03-01 13:02:01
3    3.00 2010-03-01 13:02:02
4    4.00 2010-03-01 13:02:03
5    5.00 2010-03-01 13:02:04
6    1.10 2010-03-01 13:02:05
7    2.10 2010-03-01 13:02:06
8    3.20 2010-03-01 13:02:07
当我尝试将数据放入矩阵形式时:

clock2<-seq(from=as.POSIXct("2010-03-01 13:02:00"),to=as.POSIXct("2010-05-05 13:10:00"),by="5 sec")
tx<-t(matrix(sensor,5,4))
newd<-cbind(tx,clock2[1:nrow(tx)])
newd


     [,1] [,2] [,3] [,4] [,5]       [,6]
[1,]  1.0 2.00  3.0  4.0 5.00 1267444920
[2,]  1.1 2.10  3.2  4.2 5.10 1267444920
[3,]  1.2 2.20  3.1  4.3 5.40 1267444920
[4,]  1.1 2.22  3.3  4.9 5.55 1267444920

clock2OP已请求对数据进行整形,以使构成一个测量值的5个连续传感器值显示在一行中。此外,将附加测量周期结束的时间

如前所述,
矩阵
在这里不起作用,因为
矩阵
只能容纳一个类。因此,我们需要使用一个
data.frame
对象,它可以容纳5个数字列和一个类
POSIXct

对于重塑,使用
dcast()
函数:

library(data.table)
dcast(setDT(orig)[, rn := .I - 1L], 
      (time[5L * rn %/% 5L + 1L] + 5) ~ paste0("V", rn %% 5L + 1L), 
      value.var = "sensor")
或者,可以使用
lubridate
包中的
floor\u date()
来避免索引算法:

dcast(setDT(orig)[, rn := .I - 1L], 
      lubridate::floor_date(time + 5, unit = " 5 second") ~ paste0("V", rn %% 5L + 1L), 
      value.var = "sensor")
资料
sensor
matrix
只能容纳单个类,因此它强制为单个类。使用
data.frame
list
使用newd请让问题标题反映问题。
                  time  V1  V2  V3   V4   V5
1: 2010-03-01 13:02:05 1.0 2.00 3.0 4.0 5.00
2: 2010-03-01 13:02:10 1.1 2.10 3.2 4.2 5.10
3: 2010-03-01 13:02:15 1.2 2.20 3.1 4.3 5.40
4: 2010-03-01 13:02:20 1.1 2.22 3.3 4.9 5.55
dcast(setDT(orig)[, rn := .I - 1L], 
      lubridate::floor_date(time + 5, unit = " 5 second") ~ paste0("V", rn %% 5L + 1L), 
      value.var = "sensor")
sensor <- c(1, 2, 3, 4, 5, 1.1, 2.1, 3.2, 4.2, 5.1, 1.2, 2.2, 3.1, 4.3, 5.4, 1.1, 2.22, 3.3, 4.9, 5.55)
time <- seq(from = as.POSIXct("2010-03-01 13:02:00"), length.out = length(sensor), by = "1 sec")
orig <- data.frame(sensor, time)