我有一个列表可能的组合如下:ř创建的变量
mylist <- list(A=seq_len(3)-1, A=seq_len(3)-1, B=seq_len(2)-1, B=seq_len(2)-1)
mylist
$A
[1] 0 1 2
$A
[1] 0 1 2
$B
[1] 0 1
$B
[1] 0 1
也就是说的A
两个实例可以具有的状态0,1,2和B
两个实例可以具有的状态0,1 。
我想产生具有所有实例,用于哪些状态的总和的所有组合的产品的字符串(作为一个例子)1.
我通过首先获得所有潜在组合,两者A
这样做' S和B's
和服用所述子集的量,总和为1
all.combns <- expand.grid(mylist)
ac <- all.combns[which(rowSums(all.combns)==1),]
unname(apply(ac, 1, function(x)paste(colnames(ac), x, sep="_", collapse=" * ")))
结果是:
"A_1 * A_0 * B_0 * B_0"
"A_0 * A_1 * B_0 * B_0"
"A_0 * A_0 * B_1 * B_0"
"A_0 * A_0 * B_0 * B_1"
第一和塞康d字符串和第三和第四个字符串是相同的。 我期望的结果将是:
"2 * A_1 * A_0 * B_0 * B_0"
"2 * A_0 * A_0 * B_1 * B_0"
有一种优雅的方式来做到这一点?我考虑过在all.combns
例如A
和B
的行中添加行。然后用here所述的方法对独特元素进行计数。不过,我认为必须有一个更简单的解决方案,而不必与expand.grid
形成所有组合。
@ user1987175 - 在问候你的审查,这个答案在这里(http://stackoverflow.com/review/low-quality-posts/3871248#./3871248?&_suid=139040787868004590174438491092)显然不是一个回答;请在审核时更加小心。 – LittleBobbyTables