Объединить таблицу логических операторов с вектором для получения списка комбинаций - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть логическая таблица, которая выглядит следующим образом:

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 package

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

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете сделать это в 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"
...