将逻辑运算符表与向量结合以产生组合列表

时间:2018-09-07 13:04:59

标签: r apply

我有一个看起来像这样的逻辑表:

Var1  Var2  Var3
FALSE FALSE FALSE
FALSE TRUE  FALSE
TRUE  FALSE TRUE
TRUE  TRUE  TRUE

和带有字符串的向量:

例如c('a', 'b', 'c')

字符串的长度与逻辑表中的列数匹配。

仅在BASE R中,如何获得以列表形式显示的输出,以使输出看起来像这样:

$1 [1] character(0)   # empty
$2 [1] "b"
$3 [1] "a" "c"        # TRUE positions matched to vector positions
$4 [1] "a" "b" "c"

实际上是复制plyr包调用 mlply

例如 plyr

myset <- c('a', 'b', 'c')
n<-length(myset)
logicaltable <- expand.grid(replicate(n, list(c(F,T))))
mlply(logicaltable, function(...) { myset[c(...)] })

1 个答案:

答案 0 :(得分:3)

您可以在Base R中使用以下代码行完成此操作:

apply(df, 1, function(x) c('a', 'b', 'c')[x])

这实际上是根据数据帧中的每一行对向量c('a', 'b', 'c')进行子集设置(意味着每一行都被视为向量),然后返回一个列表。例如,对于第二行,发生这种情况:

c('a', 'b', 'c')[c(F, T, F)]
[1] "b"