0
Time    Velocity
0   0
1.5 1.21
3   1.26
4.5 1.31
6   1.36
7.5 1.41
9   1.46
10.5    1.51
12  1.56
13  1.61
14  1.66
15  1.71
16  1.76
17  1.81
18  1.86
19  1.91
20  1.96
21  2.01
22.5    2.06
24  2.11
25.5    2.16
27  2.21
28.5    2.26
30  2.31
31.5    2.36
33  2.41
34.5    2.4223
36  2.4323

だから私は時間と速度に関するデータを持っています...カットまたは which 関数を使用して、データを 6 分間隔に分割したいです...私の最大時間は通常 3000 分に達するので、同様の出力が必要ですこれに...

Time    Velocity
0   0
1.5 1.21
3   1.26
4.5 1.31
6   1.36
Time    Velocity
6   1.36
7.5 1.41
9   1.46
10.5    1.51
12  1.56
    
Time    Velocity
12  1.56
13  1.61
14  1.66
15  1.71
16  1.76
17  1.81
18  1.86

これまでに行ったことは、 data=read.delim("clipboard") を使用してデータを読み取ることです。関数「which」を使用することにしました....しかし、最大3000分間それを行う必要があります。

dat <- data[which(data$Time>=0
& data$Time < 6),],
dat1 <- data[which(data$Time>=6
& data$Time < 12),]

などしかし、3000分まで時間があれば、これはあまり便利ではありませんまた、すべての結果を1つの出力/変数に含める必要があります

4

3 に答える 3

3

ここでは、ビン間で値を複製したくないと仮定します。

cuts = cut(data$Time, seq(0, max(data$Time)+6, by=6), right=FALSE)
x <- by(data, cuts, FUN=I)

x
## cuts: [0,6)
##   Time Velocity
## 1  0.0     0.00
## 2  1.5     1.21
## 3  3.0     1.26
## 4  4.5     1.31
## ------------------------------------------------------------------------------------------------------------ 
## cuts: [6,12)
##   Time Velocity
## 5  6.0     1.36
## 6  7.5     1.41
## 7  9.0     1.46
## 8 10.5     1.51
## ------------------------------------------------------------------------------------------------------------ 
## <snip>
## ------------------------------------------------------------------------------------------------------------ 
## cuts: [36,42)
##    Time Velocity
## 28   36   2.4323
于 2013-03-26T02:48:26.203 に答える
2

重複した境界を取得したいとは思わない。here を使用しない単純なソリューションcut( @Mathew ソリューションに似ています)。

  dat <- transform(dat, index = dat$Time %/% 6)
  by(dat,dat$index,FUN=I)
于 2013-03-26T03:04:12.290 に答える
0

6 の整数倍のタイムスタンプが本当に必要な場合は、分割する前にデータの複製を行う必要があります。

txt <- "Time    Velocity\n0   0\n1.5 1.21\n3   1.26\n4.5 1.31\n6   1.36\n7.5 1.41\n9   1.46\n10.5    1.51\n12  1.56\n13  1.61\n14  1.66\n15  1.71\n16  1.76\n17  1.81\n18  1.86\n19  1.91\n20  1.96\n21  2.01\n22.5    2.06\n24  2.11\n25.5    2.16\n27  2.21\n28.5    2.26\n30  2.31\n31.5    2.36\n33  2.41\n34.5    2.4223\n36  2.4323"

DF <- read.table(text = txt, header = TRUE)

# Create duplicate timestamps where timestamp is multiple of 6 second
posinc <- DF[DF$Time%%6 == 0, ]
neginc <- DF[DF$Time%%6 == 0, ]
posinc <- posinc[-1, ]
neginc <- neginc[-1, ]

# Add tiny +ve and -ve increments to these duplicated timestamps
posinc$Time <- posinc$Time + 0.01
neginc$Time <- neginc$Time - 0.01

# Bind original dataframe without 6 sec multiple timestamp with above duplicated timestamps
DF2 <- do.call(rbind, list(DF[!DF$Time%%6 == 0, ], posinc, neginc))

# Order by timestamp
DF2 <- DF2[order(DF2$Time), ]

# Split the dataframe by quotient of timestamp divided by 6
SL <- split(DF2, DF2$Time%/%6)

# Round back up the timestamps of split data to 1 decimal place
RESULT <- lapply(SL, function(x) {
    x$Time <- round(x$Time, 1)
    return(x)
})

RESULT
## $`0`
##    Time Velocity
## 2   1.5     1.21
## 3   3.0     1.26
## 4   4.5     1.31
## 51  6.0     1.36
## 
## $`1`
##    Time Velocity
## 5   6.0     1.36
## 6   7.5     1.41
## 7   9.0     1.46
## 8  10.5     1.51
## 91 12.0     1.56
## 
## $`2`
##     Time Velocity
## 9     12     1.56
## 10    13     1.61
## 11    14     1.66
## 12    15     1.71
## 13    16     1.76
## 14    17     1.81
## 151   18     1.86
## 
## $`3`
##     Time Velocity
## 15  18.0     1.86
## 16  19.0     1.91
## 17  20.0     1.96
## 18  21.0     2.01
## 19  22.5     2.06
## 201 24.0     2.11
## 
## $`4`
##     Time Velocity
## 20  24.0     2.11
## 21  25.5     2.16
## 22  27.0     2.21
## 23  28.5     2.26
## 241 30.0     2.31
## 
## $`5`
##     Time Velocity
## 24  30.0   2.3100
## 25  31.5   2.3600
## 26  33.0   2.4100
## 27  34.5   2.4223
## 281 36.0   2.4323
## 
## $`6`
##    Time Velocity
## 28   36   2.4323
## 
于 2013-03-26T02:55:16.483 に答える