【问题标题】:Separate a column into 2 columns at the last underscore in R在 R 中的最后一个下划线处将一列分成两列
【发布时间】:2018-11-04 04:48:27
【问题描述】:

我有一个这样的数据框

id <-c("1","2","3")
col <- c("CHB_len_SCM_max","CHB_brf_SCM_min","CHB_PROC_S_SV_mean")

df <- data.frame(id,col)

我想通过将“col”分为测量和统计来创建 2 列。 stat 基本上是最后一个下划线之后的文本(最大值、最小值、平均值等)

我的想要的输出是

  id   Measurement stat
   1   CHB_len_SCM  max  
   2   CHB_brf_SCM  min   
   3 CHB_PROC_S_SV mean    

我尝试过这种方式,但 stat 列是空的。我不确定我是否指向最后一个下划线。

library(tidyverse)
df1 <- df %>%
  # Separate the sensors and the summary statistic
  separate(col, into = c("Measurement", "stat"),sep = '\\_[^\\_]*$')

我在这里缺少什么?有人能指出我正确的方向吗?

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    我们可以通过将extract 捕获为两组来使用extract,方法是确保第二组在字符串的结尾 ($) 之前有一个或多个不是_ 的字符

    library(tidyverse)
    df %>% 
       extract(col, into = c("Measurement", "stat"), "(.*)_([^_]+)$")
    #   id   Measurement stat
    #1  1   CHB_len_SCM  max
    #2  2   CHB_brf_SCM  min
    #3  3 CHB_PROC_S_SV mean
    

    或者使用带有正则表达式环视的separate

    df %>% 
       separate(col, into = c("Measurement", "stat"), sep="_(?=[^_]+$)")
    

    【讨论】:

    • 完美。感谢 akrun 显示“提取”和“分离”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2017-04-12
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多