感谢这里的输入,我还创建了一个 require(plyr) 解决方案。
不如这两种解决方案优雅,但出于某种原因,我仍然发现通读 plyr 解决方案更容易。
创建一个可以产生单个虚拟变量的函数
single.value.to.dummy<-function(value.name, list.of.lists){
ldply(.data=list.of.lists,
function(list.element){ dummy<-value.name %in% list.element
names(dummy)<-value.name
return(dummy)
})}
将此函数应用于列表列表中的所有唯一值
list.of.lists.to.dummy<-function(list.of.lists){
#Extract unique values
value.names<-unique(unlist(list.of.lists))
dummy.frame<-llply(.data=value.names,
function(value.name){
dummy<-single.value.to.dummy(value.name, list.of.lists)
return(dummy)})
return(data.frame(dummy.frame))
}
example<-cbind(example, list.of.lists.to.dummy(example$value))
groups value T S P O U A C B N V D H Y F
1 a T, S, P, O TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2 b U, A, C, B FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
3 c S, N, V, D FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
4 d H, Y, F, X FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
5 e M, Y, O, X FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
6 f Y, A, K, S FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE