data=data.frame(col1=c('m1','m1','m1','m2','m2','m2','m3','m3'),class=c('a' ,'b','c','a','b','c','a','b'))我有一个有 2 列的 data.frame,第一列是模型列表,第二列模型属性列表。我需要根据它们共享的属性显示模型的组合。我使用'by'函数得到了组合列表,如下所示:
data= data.frame(col1=c('m1','m1','m1','m2','m2','m3'), class=c('a','b','c','a','b','c'))
data.ls=by(data$col1, data$class,function(x) t(combn(x, 2)))
输出正是我所需要的,但我需要它以 data.frame 格式而不是列表,并且出现在每个列表顶部的“类”的名称应列在第三列中:
# data$class: a
# [,1] [,2]
# [1,] m1 m2
# [2,] m1 m3
# [3,] m2 m3
# Levels: m1 m2 m3
所以,我尝试了这个:
as.data.frame(do.call("rbind",data.ls))
但是输出只显示了 'col1' 的组合(使用 id 值而不是名称)而不是 'class' 属性,它位于 'by' 输出中每个列表的顶部。do.call 的输出如下所示:
# V1 V2
# 1 1 2
# 2 1 2
# 3 1 3
也试过这个:
do.call("rbind.data.frame",data.ls)
并收到此错误: NextMethod() 中的错误:无效值
决赛桌应如下所示:
data.final= data.frame(col1=c('m1','m1','m1'), col2=c('m2', 'm2', 'm3'), class=c('a','b','c'))
@Richard Scrivens 提出以下建议:
newDF <- data.frame(do.call(rbind, lapply(data.ls, as.character)), names(data.ls), row.names = NULL)
输出是:
X1 X2 X3 X4 X5 X6 names.data.ls.
1 m1 m1 m2 m2 m3 m3 a
2 m1 m1 m2 m2 m3 m3 b
3 m1 m2 m1 m2 m1 m2 c
在我看来,这种格式的输出在组合方面不如“按”列表清晰。
任何帮助将不胜感激。谢谢。