用Tidyverse在调查数据中用文本替换“其他-写入”

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

我有大量的调查响应数据,清理时遇到问题。

在调查开始时,受访者选择一个组(在此示例中为颜色),并有条件地显示相同的问题(在此示例中,“从列表中排列您喜欢的三个水果,或写另一个水果”) ),但以他们选择的颜色为条件,他们会看到不同的水果清单供您选择。

最初,数据看起来像这样。对于颜色和答案选择的每种组合,都有一个列,其值是他们给该答案选择的等级,如果他们将“其他”作为选择之一,则有一个“其他”列,其中包含他们写的文字回复:] >

# 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语句引用该对象,而不是在函数内部键入整个列表?

我有大量的调查响应数据,清理时遇到问题。在调查开始时,受访者选择一个组(在此示例中为颜色),并有条件地显示为相同的...

r tidyverse data-cleaning survey
1个回答
0
投票

您能否将第二个问题作为一个单独的问题提出?最好将每个问题单独保留,以便将来的读者更容易找到每个特定问题的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.