将转换矩阵转换为列表列表
问题描述:
我想先将矢量转换为转换矩阵(我管理的)。作为第二步,我想将结果函数应用于不同的受访者完成不同任务的数据集。 因此,我希望得到一个嵌套在答复者和任务中的列表。将转换矩阵转换为列表列表
下面是一个例子的数据帧:
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 <- 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))]
}))
+0
如果答案是有用的,你可以通过点击左侧的向上箭头upvote。 (您可以做到这一点,并将答案标记为正确。) – 2012-02-15 11:07:52
出于兴趣,您为什么需要列表清单?在大多数情况下,单个列表将更容易与事后协同工作。 – 2012-02-15 09:50:02
我错过了dlply中的总结声明......谢谢!我没有看到如何总结ans_as_list中的任务或选择特定的受访者(假设有更多)。所以我想列表清单会做的伎俩... – schultem 2012-02-15 10:48:56