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

问题描述 投票:2回答:1

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

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(...)] })
r apply
1个回答
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"
© www.soinside.com 2019 - 2024. All rights reserved.