我想首先将矢量转换为转换矩阵(我管理过)。作为第二步,我想将结果函数应用于数据集,其中不同的受访者执行不同的任务。 因此,我想获得一个嵌套在Respondent和Task上的List。
以下是一个示例数据框:
Data <- data.frame(
respondent = c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2),
task = c(1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2),
acquisition = sample(1:5, replace = TRUE)
)
这里是我的结果向量和函数,它采用了采集向量并生成了一个转换矩阵:
result <- matrix(data = 0, nrow = 5, ncol = 5)
gettrans <- function(invec){
for (i in 1:length(invec)-1){
result[invec[i],invec[i+1]] <- result[invec[i], invec[i+1]] + 1
}
return(result)
}
现在,我用
得到了平坦的结果with(Data,aggregate(acquisition,by=list(respondent=respondent,task=task),gettrans))
然而,我想要的是:
$respondent
[1]$task[1]
result
$respondent
[1]$task[2]
result
...
我和dlply一起玩了但是无法让它工作...... 任何建议赞赏!
答案 0 :(得分:2)
dlply
自然会为您提供一个列表(而不是列表列表)。调用它的标准方法是
(ans_as_list <- dlply(
Data,
.(respondent, task),
summarise,
res = gettrans(acquisition)
))
这应该适用于大多数用途,但如果您确实必须有列表列表,请使用llply
(或等效地,lapply
)进行重组。
(ans_as_list_of_lists <- llply(levels(factor(Data$respondent)), function(lvl)
{
ans_as_list[grepl(paste("^", lvl, sep = ""), names(ans_as_list))]
}))