【问题标题】:Split a column into 2 columns with "." separator R用“。”将一列分成两列。分隔符 R
【发布时间】:2020-05-14 00:41:10
【问题描述】:

我有以下数据集:

the_data <- data.frame(the_col = "a.1","b.2","c.3","d.4")

我尝试将其分成 2 列。这似乎是一个重复的问题,但让它与众不同的是我想要的分隔符(点)。我试过了:

the_data %>% separate(the_col, into = c("alfa","beta"), sep = ".") 

但我收到警告,而不是我想要的:

 alfa beta X.b.2. X.c.3. X.d.4.
1              b.2    c.3    d.4

我想要的是:

alfa   beta
a      1
b      2 
c      3
d      4

你能帮帮我吗?谢谢。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    我们可以获取长格式的数据,然后使用separate

    library(dplyr)
    library(tidyr)
    
    pivot_longer(the_data, cols = everything()) %>%
      separate(value, into = c('alpha', 'beta'), sep = "\\.") %>%
      select(-name)
    
    # A tibble: 4 x 2
    #  alpha beta 
    #  <chr> <chr>
    #1 a     1    
    #2 b     2    
    #3 c     3    
    #4 d     4    
    

    使用base R,我们可以拆分"."上的未列出字符串,将其转换为两列数据框并为其添加名称。

    setNames(do.call(rbind.data.frame, strsplit(unlist(the_data), '\\.')), 
             c('alpha', 'beta'))
    

    【讨论】:

    • 你好@Ronak Shah,非常感谢你,你的两个答案很好!
    【解决方案2】:
    the_data <- data.frame(the_col = c("a.1","b.2","c.3","d.4")) %>% 
      separate("the_col", c("alpha", "beta"), sep = "\\.")
    # R> the_data 
    #   alpha beta
    # 1     a    1
    # 2     b    2
    # 3     c    3
    # 4     d    4
    

    我认为你的问题是

    1. separate 将正则表达式作为其第二个参数,. 匹配正则表达式中的任何字符,除非您使用 \\ 对其进行转义
    2. 您打算进入列the_col 的值应该在向量中。

    【讨论】:

    • 你好@David T,谢谢你的回答,确实我使用的分隔符是"."所以我认为这是问题的根源,正如你提到的.是正则表达式中的任何字符我不知道如何表示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2021-08-31
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多