У меня есть два фрейма данных, data
и meta
. Некоторые, но не все, столбцы в data
являются логическими значениями, но они кодируются по-разному. Строки в meta
описывают столбцы в data
, указывают, должны ли они интерпретироваться как логические, и если да, то какое отдельное значение кодирует ИСТИНА, а какое отдельное значение кодирует ЛОЖЬ.
Мне нужна процедура, которая заменяет все значения data
в концептуально логических столбцах соответствующими логическими значениями из кодов в соответствующей строке meta
. Любые значения data
в концептуально логическом столбце, которые не соответствуют значению в соответствующей строке meta
, должны стать NA.
Пример маленькой игрушки для meta
:
name type false true
-----------------------------------------
a.char.var char NA NA
a.logical.var logical NA 7
another.logical.var logical 1 0
another.char.var char NA NA
Пример маленькой игрушки для data
:
a.char.var a.logical.var another.logical.var another.char.var
----------------------------------------------------------------
aa 7 0 ba
ab NA 1 bb
ac 7 NA bc
ad 4 3 bd
Вывод примера маленькой игрушки:
a.char.var a.logical.var another.logical.var another.char.var
----------------------------------------------------------------
aa TRUE TRUE ba
ab FALSE FALSE bb
ac TRUE NA bc
ad NA NA bd
Я не могу, на всю жизнь, найти способ сделать это в идиоматическом R, который обрабатывает все угловые случаи. Наборы данных большие, поэтому идиоматическое решение было бы идеальным, если это возможно. Я унаследовал этот абсолютно безумный бардак с управлением данными и буду благодарен всем, кто поможет это исправить. Я ни в коем случае не гуру R, но это кажется обманчиво сложной проблемой.