gpt4 book ai didi

r - 基于R中列的间隔制作垃圾箱

转载 作者:行者123 更新时间:2023-12-01 10:19:51 24 4
gpt4 key购买 nike

我正在尝试根据特定时间间隔制作垃圾箱,并且我希望垃圾箱在试验编号更改时重新开始计数。这是示例数据:

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)

关于r - 基于R中列的间隔制作垃圾箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com