您可以在此处使用summarise 而不是mutate 生成一个列表列,其中包含来自每个(subID, location) 的timefit 的data.frame。这些数据帧将timefit 的结果中的mu、sigma 和tau 编码为列。然后,使用unnest 取消嵌套此列表列以生成您想要的结果。
library(retimes)
library(dplyr)
library(tidyr)
result <- data %>% group_by(subID, location) %>%
summarise(timefit_out = list(data.frame(t(attr(timefit(RT),"par"))))) %>%
unnest()
请注意,我们从timefit 类中提取"par" 属性,然后将其与t 转置以形成mu、sigma 和tau 的列。
在这里,我们假设您的输入 data 是一个数据框,其中包含 subID、location 列和输入到 timefit 的反应时间数字列 RT。此类数据集的模拟示例如下:
data <- structure(list(subID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
location = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
RT = c(0.341764254728332, 0.775535081513226, 0.281827432336286,
0.23970171622932, 0.00226009078323841, 0.385179498931393,
0.645917195128277, 0.812101020244882, 0.183301427634433,
0.981765420176089, 0.656369511503726, 0.824469136772677,
0.923240559641272, 0.598261737963185, 0.309975759591907,
0.778991278028116, 0.757012664806098, 0.869985132943839,
0.439378245733678, 0.8420404586941, 0.643788777757436, 0.381316626211628,
0.123881611274555, 0.540528740268201, 0.661961955949664,
0.0592848095111549, 0.904047027230263, 0.190083365887403,
0.963809312786907, 0.0925120878964663, 0.117538752267137,
0.451085010776296, 0.703220259631053, 0.378451474476606,
0.305718191433698, 0.70383172808215, 0.699415655340999, 0.740436099236831,
0.429179352009669, 0.205358384409919)), .Names = c("subID",
"location", "RT"), row.names = c(NA, 40L), class = "data.frame")
## subID location RT
##1 1 0 0.341764255
##2 1 0 0.775535082
##3 1 0 0.281827432
##4 1 0 0.239701716
##5 1 0 0.002260091
##6 1 0 0.385179499
##7 1 0 0.645917195
##8 1 0 0.812101020
##9 1 0 0.183301428
##10 1 0 0.981765420
##11 1 1 0.656369512
##12 1 1 0.824469137
##13 1 1 0.923240560
##14 1 1 0.598261738
##15 1 1 0.309975760
##16 1 1 0.778991278
##17 1 1 0.757012665
##18 1 1 0.869985133
##19 1 1 0.439378246
##20 1 1 0.842040459
##21 2 0 0.643788778
##22 2 0 0.381316626
##23 2 0 0.123881611
##24 2 0 0.540528740
##25 2 0 0.661961956
##26 2 0 0.059284810
##27 2 0 0.904047027
##28 2 0 0.190083366
##29 2 0 0.963809313
##30 2 0 0.092512088
##31 2 1 0.117538752
##32 2 1 0.451085011
##33 2 1 0.703220260
##34 2 1 0.378451474
##35 2 1 0.305718191
##36 2 1 0.703831728
##37 2 1 0.699415655
##38 2 1 0.740436099
##39 2 1 0.429179352
##40 2 1 0.205358384
本例中RT 的值是使用runif 生成的,因此它们介于0 和1 之间。你的价值观有很大不同,但这在这里应该无关紧要。
使用这些数据,我们得到:
print(result)
##Source: local data frame [4 x 5]
##Groups: subID [2]
##
## subID location mu sigma tau
## <int> <int> <dbl> <dbl> <dbl>
##1 1 0 0.5275058 0.2553621 0.007086207
##2 1 1 0.2609386 0.1583494 0.085449559
##3 2 0 0.5205647 0.1994942 0.027329115
##4 2 1 0.4632886 0.2881343 0.008026460