【问题标题】:Split data frame column when square brackets方括号时拆分数据框列
【发布时间】:2017-09-03 01:16:39
【问题描述】:

我有一个带有一些模型估计的数据框。根据观察,估计只有一个值或一个值以及方括号之间的置信区间。顺便说一句,变量是一个字符(我想我需要在某个时候更改它)

df<-data.frame(c("5","3","8 [3 - 5]")

我想将此数据框列 (x) 拆分为两列。第一个用于估计值 (y),第二个用于置信区间,带或不带括号 (z)。

我尝试过使用 tidyr::separate 和 tidyr::split(我很喜欢 dplyr 家族:-),但我没有得到想要的结果。

tidyr::separate(col=x,into=c("y","z"),sep="//[")

你知道我做错了什么吗?

【问题讨论】:

    标签: r dataframe split separator tidyr


    【解决方案1】:

    这可以通过extract来完成

    library(tidyr)
    extract(df, x, into = c("y", "z"), "(\\d+)\\s*(.*)")
    

    或者在separate中使用extra参数

    separate(df, x, into = c("y", "z"), "\\s+", extra = "merge")
    

    数据

    df <- data.frame(x= c("5","3","8 [3 - 5]"))
    

    【讨论】:

    • 太棒了!这正是我正在寻找的解决方案类型。两个问题:1) sep= 中的“神奇”代码是什么意思:-)? 2) 应用您的代码时出现错误:“加入不同级别的因子,强制转换为字符向量。名称错误 (l)
    • 我用稍微不同的代码解决了这个问题。我先删除了空格,然后应用了 tidyr::separate,然后没有 sep=。老实说,我不知道为什么它以前不起作用以及为什么现在起作用,但是没关系。 df$var&lt;-gsub(" ","",df$var)separate(col=var,into=c("var1","var2"),extra="merge")
    【解决方案2】:

    来吧:

    library("stringr")
    df <- data.frame(c("5", "3", "8 [3 - 5]")) 
    df2 = str_split_fixed(string = df[,1], pattern = "\\[", n = 2)               
    df2[,2] = gsub(pattern = "\\]", replacement = "", x = df2[,2])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2020-07-03
      • 2021-09-01
      相关资源
      最近更新 更多