r - 使用 R 和 dplyr 扩展和离散化时间序列数据

我有一个实验数据。我们为人类决策计时。我们有一组备选方案(我们称它们为 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 管道的解决方案将是最受欢迎的。但我对其他解决方案持开放态度。谢谢!

最佳答案

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))

https://stackoverflow.com/questions/40630116/

相关文章:

batch-file - 为什么不使用批处理文件中的 RMDIR 作为最后一个命令删除文件夹?

python - 在 Python 中将纳秒转换为时间戳

python - 阅读 Pandas 数据框时跳过包含特定值的特定行

python - 如何在发布数据python中接收字典

oop - 开闭原则与多态性

haskell - 如何将整数插入排序列表

cordova - 内容安全策略 Cordova 问题

r - 函数不能 "see"全局环境中定义的其他函数

python-3.x - 如何为 ttk.OptionMenu 编辑 ttk 样式

scala - 没有参数的scala方法中的模式匹配