基于R中列的间隔制作垃圾箱
Making bins based on interval based on column in R
我正在尝试根据特定时间间隔制作垃圾箱,并且我希望垃圾箱在试用编号更改时重新开始计数。这是示例数据:
structure(list(Trial_Nr = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L), seconds = c(1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75,
3, 3.25, 3.5, 3.75)), .Names = c("Trial_Nr", "seconds"), class = "data.frame", row.names = c(NA,
-12L))
数据集如下所示:
Trial_Nr seconds
1 1 1.00
2 1 1.25
3 1 1.50
4 1 1.75
5 1 2.00
6 1 2.25
7 2 2.50
8 2 2.75
9 2 3.00
10 2 3.25
11 2 3.50
12 2 3.75
我的目标是在每个试验编号内制作 0.50 秒的垃圾箱,垃圾箱在新试验开始时重新开始。仅供参考:真实数据集有更多的数据点,秒列的间隔不相等。这是我的目标:
Trial_Nr seconds bin
1 1 1.00 1
2 1 1.25 1
3 1 1.50 2
4 1 1.75 2
5 1 2.00 3
6 1 2.25 3
7 2 2.50 1
8 2 2.75 1
9 2 3.00 2
10 2 3.25 2
11 2 3.50 3
12 2 3.75 3
我试过剪切功能,可以按间隔剪切,但我不知道如何计算试用号。感谢您的帮助!
一个简单的tapply
就可以做到:
myData$bin <- unlist(tapply(myData$seconds, myData$Trial_Nr, function(x) (x-min(x)) %/% 0.5 + 1))
> myData
Trial_Nr seconds bin
1 1 1.00 1
2 1 1.25 1
3 1 1.50 2
4 1 1.75 2
5 1 2.00 3
6 1 2.25 3
7 2 2.50 1
8 2 2.75 1
9 2 3.00 2
10 2 3.25 2
11 2 3.50 3
12 2 3.75 3
编辑:
万一trial_Nr
没有排序,tapply
可能会乱序。然后你可以简单地一步一步地用 split:
dat <- split(myData, myData$Trial_Nr)
dat <- lapply(dat, function(x) {x$bin <- (x$seconds-min(x$seconds)) %/% 0.5 + 1; x})
dat <- unsplit(dat, myData$Trial_Nr)
我正在尝试根据特定时间间隔制作垃圾箱,并且我希望垃圾箱在试用编号更改时重新开始计数。这是示例数据:
structure(list(Trial_Nr = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L), seconds = c(1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75,
3, 3.25, 3.5, 3.75)), .Names = c("Trial_Nr", "seconds"), class = "data.frame", row.names = c(NA,
-12L))
数据集如下所示:
Trial_Nr seconds
1 1 1.00
2 1 1.25
3 1 1.50
4 1 1.75
5 1 2.00
6 1 2.25
7 2 2.50
8 2 2.75
9 2 3.00
10 2 3.25
11 2 3.50
12 2 3.75
我的目标是在每个试验编号内制作 0.50 秒的垃圾箱,垃圾箱在新试验开始时重新开始。仅供参考:真实数据集有更多的数据点,秒列的间隔不相等。这是我的目标:
Trial_Nr seconds bin
1 1 1.00 1
2 1 1.25 1
3 1 1.50 2
4 1 1.75 2
5 1 2.00 3
6 1 2.25 3
7 2 2.50 1
8 2 2.75 1
9 2 3.00 2
10 2 3.25 2
11 2 3.50 3
12 2 3.75 3
我试过剪切功能,可以按间隔剪切,但我不知道如何计算试用号。感谢您的帮助!
一个简单的tapply
就可以做到:
myData$bin <- unlist(tapply(myData$seconds, myData$Trial_Nr, function(x) (x-min(x)) %/% 0.5 + 1))
> myData
Trial_Nr seconds bin
1 1 1.00 1
2 1 1.25 1
3 1 1.50 2
4 1 1.75 2
5 1 2.00 3
6 1 2.25 3
7 2 2.50 1
8 2 2.75 1
9 2 3.00 2
10 2 3.25 2
11 2 3.50 3
12 2 3.75 3
编辑:
万一trial_Nr
没有排序,tapply
可能会乱序。然后你可以简单地一步一步地用 split:
dat <- split(myData, myData$Trial_Nr)
dat <- lapply(dat, function(x) {x$bin <- (x$seconds-min(x$seconds)) %/% 0.5 + 1; x})
dat <- unsplit(dat, myData$Trial_Nr)