【发布时间】:2012-02-15 08:15:51
【问题描述】:
我想先将一个向量转换为一个转换矩阵(由我管理)。作为第二步,我想将结果函数应用于不同受访者执行不同任务的数据集。 因此,我想获得一个嵌套在 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 但无法让它工作...... 任何建议表示赞赏!
【问题讨论】:
-
出于兴趣,为什么需要列表列表?在大多数情况下,之后使用单个列表会更容易。
-
我错过了 dlply 中的汇总语句......谢谢!我看不到如何总结 ans_as_list 中的任务或选择特定的受访者(假设有更多)。所以我认为列表列表可以解决问题......