当前位置: 首页 > 知识库问答 >
问题:

用Tidyverse将“Other-Write in”改为“Write in text in survey

惠志
2023-03-14

我有一个很大的调查响应数据集,我有困难清理。

原来,数据看起来是这样的。每一个颜色和答案选择的组合都有一栏,其值是他们给出的答案选择的排名,如果他们把“其他”作为他们的选择之一,则有一个“其他”栏,其中有一个他们写的文本回应:

# 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                  

共有1个答案

韦业
2023-03-14

你能把你的第二个问题作为一个单独的问题来问吗?最好让每个问题都保持独立,这样以后的读者就更容易找到每个具体问题的解决方案

对于第一个问题,方法是使用if_else(),其中如果包含单词“other”(使用str_detect()),则替换为Q1_other_answer,否则保持原样。然后使用mutate_at()将其应用于所需的变量。

library(tidyverse)

mydf <- tribble(
~responseid, ~color,  ~q1_first_choice,   ~q1_second_choice,   ~q1_third_choice,   ~q1_other_answer,
34, "red   " , "q1_red_b     "  ,    "q1_red_a    "    ,    "q1_red_other "   ,   "Pomegranate"    ,
35, "blue  " , "q1_blue_a    "  ,    "q1_blue_c   "    ,    "q1_blue_b    "   ,   NA             ,
36, "green " , "q1_green_other" ,    "q1_green_b  "    ,    "q1_green_a   "   ,   "Tangerine"      ,
37, "purple" , "q1_purple_b  "  ,    "q1_purple_a "    ,    "q1_purple_c  "   ,   NA             ,
38, "red   " , "q1_red_a     "  ,    "q1_red_other"    ,    "q1_red_c     "   ,   "Watermelon"     ,
39, "green " , "q1_green_a   "  ,    "q1_green_c  "    ,    "q1_green_b   "   ,   NA             ,
40, "purple" , "q1_purple_b  "  ,    "q1_purple_a "    ,    "q1_purple_c  "   ,   NA             ,
41, "blue  " , "q1_blue_c    "  ,    "q1_blue_a   "    ,    "q1_blue_other"   ,   "Blueberries"    ,
42, "blue  " , "q1_blue_a    "  ,    "q1_blue_c   "    ,    "q1_blue_b    "   ,   NA             ,
43, "green " , "q1_green_c   "  ,    "q1_green_b  "    ,    "q1_green_a   "   ,   NA             ,
44, "red   " , "q1_red_b     "  ,    "q1_red_a    "    ,    "q1_red_c     "   ,   NA       
) %>% 
  mutate_if(is.character, str_trim)

mutate_at(mydf, vars(ends_with("choice")), ~ if_else(str_detect(., "other"), q1_other_answer, .))

# 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         Pomegranate     Pomegranate    
 2         35 blue   q1_blue_a       q1_blue_c        q1_blue_b       NA             
 3         36 green  Tangerine       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        Watermelon       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        Blueberries     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             
 类似资料:
  • 我希望得到您对以下问题和解决方案(潜在)的反馈。 假设有一个可运行的任务,该任务对 CPU 使用情况进行采样并将其写入 CSV 文件。此任务不返回任何结果。这需要安排永久定期执行。如果用户取消任务,我们关闭文件编写器,用户可以下载CSV文件。 当您将这样的任务提交给ListeningScheduledExecutorService(如下所示)时,您将获得一个ListenableScheduledF

  • 问题内容: 我正在尝试包装一些用于Java的旧代码,很高兴看到Swig能够处理头文件,并且生成了一个几乎可以正常工作的出色包装器。现在,我正在寻找使它真正起作用的深层魔术。 CI中的功能看起来像这样 此函数返回的该整数是万一失败的错误代码。参数是 是一个字符缓冲区 是缓冲区中数据的长度 另一个字符缓冲区,其中包含调用DustyVoodoo的结果 因此,您可以看到行进方向,结果实际上是通过第三个参数

  • 与另一个包围盒求并集,得到的也是一个包围盒。 参数 名称 类型 默认值 描述 other zrender.BoundingRect 另一个包围盒。 返回值 新的包围盒,类型:zrender.BoundingRect。

  • 判断两个包围盒是否相交。 参数 名称 类型 默认值 描述 other zrender.BoundingRect 另一个包围盒。 返回值 相交部分的包围盒,类型:zrender.BoundingRect。

  • 从另一个包围盒复制属性。 参数 名称 类型 默认值 描述 other zrender.BoundingRect 另一个包围盒。

  • To learn more about the Basic Elements To see the full API document in Markdown format, see APIs To contribute to Gio.js's code base, read Developer Guide