【问题标题】:How to separate a string column into multiple columns?如何将字符串列分成多列?
【发布时间】:2021-08-20 17:21:17
【问题描述】:
# A tibble: 268 x 1
   `Which of these social media platforms do you have an account in right now?`
   <chr>                                                                       
 1 Facebook, Instagram, Twitter, Snapchat, Reddit, Signal                      
 2 Reddit                                                                      
 3 Facebook, Instagram, Twitter, Linkedin, Snapchat, Reddit, Quora             
 4 Facebook, Instagram, Twitter, Snapchat                                      
 5 Facebook, Instagram, TikTok, Snapchat                                       
 6 Facebook, Instagram, Twitter, Linkedin, Snapchat                            
 7 Facebook, Instagram, TikTok, Linkedin, Snapchat, Reddit                     
 8 Facebook, Instagram, Snapchat                                               
 9 Linkedin, Reddit                                                            
10 Facebook, Instagram, Twitter, TikTok                                        
# ... with 258 more rows

我想将这个字符串列分成多个列,以便在自己的列中获取每个社交媒体。

【问题讨论】:

    标签: r string dataframe data-manipulation


    【解决方案1】:

    您可以使用 tidytext 包中的 unnest_tokenstidyr 中的 spread 来获得您想要的效果...

    library(tidyverse)
    library(tidytext)
    
    df %>%
      mutate(Id = row_number(), HasAccount = "Yes") %>%
      unnest_tokens(Network, `Which of these social media platforms do you have an account in right now?`, to_lower = F) %>%
      spread(Network, HasAccount, fill = "No")
    

    (我生成了我自己的数据版本,所以这看起来与你的不同)

    # A tibble: 268 x 8
          Id Facebook Instagram Reddit Signal Snapchat TikTok Twitter
       <int> <chr>    <chr>     <chr>  <chr>  <chr>    <chr>  <chr>  
     1     1 No       No        No     No     No       No     Yes    
     2     2 Yes      Yes       No     No     Yes      No     Yes    
     3     3 No       Yes       No     Yes    No       Yes    No     
     4     4 No       Yes       No     No     Yes      No     No     
     5     5 No       Yes       No     Yes    Yes      Yes    Yes    
     6     6 No       Yes       No     No     No       No     No     
     7     7 No       No        Yes    Yes    No       Yes    Yes    
     8     8 No       No        Yes    No     No       No     Yes    
     9     9 No       No        Yes    No     Yes      Yes    No     
    10    10 No       Yes       Yes    Yes    Yes      No     Yes
    

    【讨论】:

    • 我在执行您的代码时收到此错误 ```` Erreur :每行输出必须由唯一的键组合标识。密钥共享 2 行:* 451, 452````
    • @wageeh 我添加了一个修复程序(mutate(Id = row_number()) 行)
    • 我仍然收到此错误Error in UseMethod("mutate") : no applicable method for 'mutate' applied to an object of class "function
    【解决方案2】:

    tidyr::separate 应该为您执行此操作(尽管它可能会警告不同行中的元素数量不均匀)

    library(tidyverse)
    dd <- tibble(x = c("a", "a, b", "a, b, c"))
    maxcols <- 3
    dd %>% separate(x, into=paste0("y", 1:maxcols))
    
     y1    y2    y3   
      <chr> <chr> <chr>
    1 a     NA    NA   
    2 a     b     NA   
    3 a     b     c    
    

    警告信息: 预计3件。在 2 行 [1, 2] 中填充了 NA 的缺失部分。

    我认为@JasonPunyon 的答案比我的更有用,尽管我的确实解决了您所写的问题(“将这一列分成多列”)

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 2021-02-19
      • 2017-04-16
      • 1970-01-01
      • 2021-11-12
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多