【发布时间】:2020-11-13 02:27:18
【问题描述】:
我有这样的数据
v1 = sample(c("a","b"), 1000, replace = T)
v2 = sample(c("c","d"), 1000, replace = T)
X = cbind(v1, v2)
即两个变量,每个变量可以取两个值。目标是生成一个索引或类似的东西,以根据这两个变量将此数据子集到所有可能的子集中。这九个子集可以使用以下条件来描述(稍微滥用符号):
#1# (a ) & (c )
#2# (a ) & ( d)
#3# ( b) & (c )
#4# ( b) & ( d)
#5# (a ) & (c | d)
#6# ( b) & (c | d)
#7# (a | b) & (c )
#8# (a | b) & ( d)
#9# (a | b) & (c | d)
也就是说,子集#1 应该满足(var1 == "a") & (var2 == "c"),子集#5 应该满足var1 == "a",而子集#9 对应于完整的数据集,依此类推。
这个问题可能与this 密切相关,我怀疑我想要的可以使用combn() 来完成。但是,我无法弄清楚如何将其中的答案扩展到我的问题的多个变量。
使用硬编码循环解决这个特定问题绝对是可能的(同时也非常不优雅)。但是,该解决方案应该推广到更多变量和每个变量的不同数量的值。因此,这很快变得不可行。
编辑:在另一个线程中找到答案,将此标记为重复。
【问题讨论】:
-
我不明白只有两个变量(
var1和var2)如何实现a & b & c & d? -
我认为应该读作
(a | b) & (c | d) -
这对我来说是个糟糕的符号,点了。
a & b & c & d应该是指“整个数据集”,即@Bas 所说的。我认为我提供的表格可能比完整的逻辑语句更易于阅读。 -
我编辑了我的原始帖子并包含了比我最初提供的更有意义的逻辑陈述。