У меня есть таблица (d.tab
) с парами вопросов и ответов из опроса. Некоторые из них являются ответами с одним выбором, некоторые - с несколькими вариантами ответов. Я хочу найти текстовое значение ответа с одним выбором из его числового значения. Для этого у меня есть таблица поиска (d.lookup
).
Я попытался merge
их, но это немного некрасиво, так как теперь мне нужно отфильтровать все строки, где value != answer_id
. Есть ли более красивый способ сделать это, возможно, используя plyr
или dplyr
или tidyr
?
tab = '
question_id question_type subject value
1 single-choice 1 1
2 multiple-choice 1 2
3 single-choice 1 2
1 single-choice 2 2
2 multiple-choice 2 3,4
3 single-choice 2 2
'
lookup = '
question_id answer_id answer_text
1 1 female
1 2 male
3 1 no
3 2 yes
'
d.tab = read.table(text = tab, header = TRUE)
d.lookup = read.table(text = lookup, header = TRUE)
merge(d.tab, d.lookup, by = "question_id", all.x = TRUE)
Я не хочу ничего делать с multiple-choice
строками, а просто обновляю исходный фрейм данных, чтобы заменить value
фактическим текстом из answer_text
d.tab
, если answer_id
соответствуют value
.
Я знаю, что могу:
merge(d.tab, d.lookup, by.x = c("question_id", "value"), by.y = c("question_id", "answer_id"), all.x = TRUE)
Но это дает мне новый столбец answer_text
с исходным value
, который мне не нужен.
3,4
будет немного сложной. - person Stibu   schedule 27.02.2016