【问题标题】:Extract from string separated by colon and semicolon in R从R中用冒号和分号分隔的字符串中提取
【发布时间】:2017-12-11 19:03:22
【问题描述】:

我有一个字符串向量,我想从中提取信息。字符串如下所示:

obs, product
  1, apple:pink lady;grade 1
  2, apple--pink lady
  3, orange

我想提取信息并像这样组织:

obs, product_1, product_2, product_3
  1, apple, pink lady, grade 1
  2, apple, pink lady, NA,
  3, orange, NA, NA

我是编程新手,曾尝试使用 sub(';.*$','',datasetname),它将返回一个新向量,对于 obs 1,我可以得到产品 1 和 2 的组合因此,我将需要再做一轮来分离新形成的字符串。但是,对于 obs 3(没有任何特殊字符、冒号或分号),该函数将返回整个内容。另外,我还需要考虑一些分隔符可以不同的情况,比如“--”,而不是冒号和分号。

我想知道如何使用 sqldf 或 R 中的其他包获得我想要的东西?

【问题讨论】:

    标签: r string sqldf


    【解决方案1】:

    我们可以使用base R 来做到这一点

    df2 <- cbind(df1[1], read.csv(text=gsub('[:;-]+', ',', df1$product),
           header = FALSE, na.strings = "", col.names = paste0("product_", 1:3)))
    
    df2
    #   obs product_1 product_2 product_3
    #1   1     apple pink lady   grade 1
    #2   2     apple pink lady      <NA>
    #3   3    orange      <NA>      <NA>
    

    【讨论】:

    • 您可以使用col.names = paste0("product_", 1:max(sapply(strsplit(df1$product, "[:;-]+"), length))) 使col.names 参数动态化
    • 你能再解释一下吗?我是新来的。感谢您的宝贵时间。
    • @Zuo 我将所有分隔符替换为,gsub 并读取product 列与read.csv 创建三列然后cbind 与第一列
    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多