我有大量的调查响应数据,清理时遇到问题。
在调查开始时,受访者选择一个组(在此示例中为颜色),并有条件地显示相同的问题(在此示例中,“从列表中排列您喜欢的三个水果,或写另一个水果”) ),但以他们选择的颜色为条件,他们会看到不同的水果清单供您选择。
最初,数据看起来像这样。对于颜色和答案选择的每种组合,都有一个列,其值是他们给该答案选择的等级,如果他们将“其他”作为选择之一,则有一个“其他”列,其中包含他们写的文字回复:] >
# A tibble: 11 x 8 responseid color red_q1_a red_q1_b red_q1_c red_q1_other red_q1_other_answer blue_q1_a <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> 1 34 red 2 1 NA 3 "Pomegranates" NA 2 35 blue NA NA NA NA NA 1 3 36 green NA NA NA NA NA NA 4 37 purple NA NA NA NA NA NA 5 38 red 1 NA 3 2 "Watermelon" NA 6 39 green NA NA NA NA NA NA 7 40 purple NA NA NA NA NA NA 8 41 blue NA NA NA NA NA NA 9 42 blue NA NA NA NA NA 2 10 43 green NA NA NA NA NA NA 11 44 red 1 3 2 NA NA NA
对于第一个问题,我设法清除了数据,使其看起来像这样:
# A tibble: 11 x 6 responseid color q1_first_choice q1_second_choice q1_third_choice q1_other_answer <dbl> <chr> <chr> <chr> <chr> <chr> 1 34 red q1_red_b q1_red_a q1_red_other "Pomegranate" 2 35 blue q1_blue_a q1_blue_c q1_blue_b NA 3 36 green q1_green_other q1_green_b q1_green_a "Tangerine" 4 37 purple q1_purple_b q1_purple_a q1_purple_c NA 5 38 red q1_red_a q1_red_other q1_red_c "Watermelon" 6 39 green q1_green_a q1_green_c q1_green_b NA 7 40 purple q1_purple_b q1_purple_a q1_purple_c NA 8 41 blue q1_blue_c q1_blue_a q1_blue_other "Blueberries" 9 42 blue q1_blue_a q1_blue_c q1_blue_b NA 10 43 green q1_green_c q1_green_b q1_green_a NA 11 44 red q1_red_b q1_red_a q1_red_c NA
我想采取另外两个步骤,但我不确定如何有效地执行这些步骤。首先,我想用文字文本值替换所有属于“其他”选项的排名选项,因此它看起来像这样:
responseid color q1_first_choice q1_second_choice q1_third_choice 34 red q1_red_b q1_red_a "Pomegranate" 35 blue q1_blue_c q1_blue_a q1_blue_b 36 green "Tangerine" q1_green_b q1_green_a 37 purple q1_purple_b q1_purple_a q1_purple_c 38 red q1_red_a "Watermelon" q1_red_c 39 green q1_green_a q1_green_c q1_green_b 40 purple q1_purple_b q1_purple_a q1_purple_c 41 blue q1_blue_c q1_blue_b "Blueberries" 42 blue q1_blue_a q1_blue_c q1_blue_b 43 green q1_green_c q1_green_b q1_green_a 44 red q1_red_b q1_red_a q1_red_c
我在尝试使用高效的ifelse或case_when时遇到麻烦-我想要一个函数说,对于q1_first_choice:q1_third_choice列中的所有值,如果它们包含字符串“ other”,则将它们替换为该行的q1_other_answer列。
然后,最后,我要用实际值替换答案代码(“ q1_blue_c”等)。我认为使用case_when函数可以很简单,但是对于很长的案例列表,是否有一种有效的方法可以将该转换应用于多行?我确实有一个调查手册,将所有变量名称链接到它们的实际答案选择(例如,通过数百种选择,q1_red_a是“ Apple”,q1_red_b是“ Banana”,等等)。是否有一种很好的方法将该列表存储为R中的某种对象,并设置ifelse / case_when语句引用该对象,而不是在函数内部键入整个列表?
我有大量的调查响应数据,清理时遇到问题。在调查开始时,受访者选择一个组(在此示例中为颜色),并有条件地显示为相同的...
您能否将第二个问题作为一个单独的问题提出?最好将每个问题单独保留,以便将来的读者更容易找到每个特定问题的解决方案。