【问题标题】:Expanding and discretizing time series data with R and dplyr使用 R 和 dplyr 扩展和离散化时间序列数据
【发布时间】:2017-03-30 12:46:39
【问题描述】:

我有来自实验的数据。我们为人类的决策计时。我们有一组备选方案(我们称它们为 A、B、C、D),可以在 30 秒内重复选择,我们对第一个、第二个、第 N 个选择进行计时(受试者可能会改变主意)。数据如下所示(时间以毫秒为单位):

subject time    choice
1       2204    A
1       3673    B
1       8435    C
1       12640   B
1       24031   A

我想离散化和扩展数据,以便能够获得每秒选择的选项;每次没有选择时默认为 0(还)。理想情况下,它应该是这样的

subject second  choice
1       1       0
1       2       0
1       3       A
1       4       B
1       5       B
1       6       B
1       7       B
1       8       B
1       9       C
1       10      C
1       11      C
1       12      C
1       13      B

...依此类推,直到秒 = 30。

非常欢迎基于 tidyverse 包和 dplyr 管道的解决方案。但我对其他解决方案持开放态度。谢谢!

【问题讨论】:

  • 我无法理解输出数据帧。为什么2个A,5个B......?
  • 哦,时间以毫秒为单位!!明白了
  • @joel.wilson :我知道受试者在 2.204 秒后选择了 A。因此,在第二个 1,他没有提交任何选择;在第二个 2,仍然没有 coice(输出数据集中的错误,已编辑);在第二个 3,临时选择是 A;在第 4 秒:他已经切换到 B(切换到 B 发生在 3.673 秒后)。等等。我需要在第 30 秒之前填写这样的表格。

标签: r time-series dplyr tidyverse


【解决方案1】:
library(dplyr)
library(tidyr)
library(zoo)
df %>%   
  mutate(time=ceiling(time/1000)) %>% 
  complete(subject, time=1:30) %>% 
  group_by(subject) %>% 
  mutate(choice = na.locf(choice, na.rm = FALSE))

数据

df = structure(list(subject = c(1L, 1L, 1L, 1L, 1L), time = c(2204L, 
3673L, 8435L, 12640L, 24031L), choice = c("A", "B", "C", "B", 
"A")), .Names = c("subject", "time", "choice"), class = "data.frame", row.names = c(NA, 
-5L))

【讨论】:

  • 这很好,谢谢,但是我在将逻辑扩展到多个主题的多个决策的情况时遇到了麻烦——就像我的数据一样,每个主题有大约 200 个主题,每个主题有 24 个不同的决策任务。我在玩,一旦找到出路就会批准!谢谢
  • @PaoloCrosetto,查看更新。它现在应该适用于多个主题。希望有帮助
【解决方案2】:

这是使用 Base R 方法...可能不像其他答案那么优雅

dt = fread("subject time    choice
1       2204    A
1       3673    B
1       8435    C
1       12640   B
1       24031   A")    

sec <- ceiling(dt$time/1000)
dt1 <- data.table( a = 1:30)
dt1$b <- cumsum(1:30 %in% sec)

x <- dt$choice[dt1$b] 
dt1$ans <- c(rep(0, 30-length(x)), x)

 dt1
     a b ans
 1:  1 0   0
 2:  2 0   0
 3:  3 1   A
 4:  4 2   B
 5:  5 2   B
 .
 .
 .
17: 17 4   B
18: 18 4   B
19: 19 4   B
20: 20 4   B
.
.
.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多