【问题标题】:Split String after first character在第一个字符后拆分字符串
【发布时间】:2016-08-02 15:52:53
【问题描述】:

我在数据框中有一列,如下所示:

D0.5
A4
C1.3
B2.0

我希望能够拆分列,以便第一个条目(始终是单个字符)与条目的其余部分(始终是数字,但根据条目的长度不同)分开

我想基本上完全做到这一点,除了在第一个条目而不是第 5 个和在 R 中而不是 php 之后。

split string after x characters

【问题讨论】:

    标签: r strsplit


    【解决方案1】:

    你可以使用substring

    x <- c("D0.5", "A4", "C1.3", "B2.0")
    
    substring(x, 1, 1)
    
    [1] "D" "A" "C" "B"
    

    只获取数字部分:

    as.numeric(substring(x, 2, nchar(x)))
    
    [1] 0.5 4.0 1.3 2.0
    

    或者使用stringi:

    as.numeric(stringi::stri_sub(x, 2))
    

    并使用stringr:

    as.numeric(stringr::str_sub(x, 2))
    

    对于stringistringr2 代表起始位置。如果需要,您可以包含结束位置,否则默认情况下它是最后一个字符。

    【讨论】:

    • 数字部分呢?
    • 你应该提取 0.5 等,大概是一个数字,而不是一个字符串。
    • 要添加到您的解决方案中,您可以执行以下操作将其放入数据框中:data.frame(cbind(Letter=str_sub(x, 1, 1), Number=str_sub(x, 2)))(其中x 是输入向量)。
    • @steveb,谢谢!但我认为在 df 中分配单个结果或在没有cbind 的情况下使用您的建议会更容易。 cbind 会将列转换为因子
    • @Sumedh 明白了。以下会比我最初建议的效果更好:data.frame(Letter=str_sub(x, 1, 1), Number=as.numeric(str_sub(x, 2)), stringsAsFactors = FALSE)(或这个的一些变体)。
    【解决方案2】:

    我们可以使用sub

    as.numeric(sub("^.(.*)", "\\1", v1))
    #[1] 0.5 4.0 1.3 2.0
    

    或者

    library(tidyr)
    extract_numeric(v1)
    #[1] 0.5 4.0 1.3 2.0
    

    数据

    v1 <- c("D0.5", "A4", "C1.3", "B2.0")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多