【问题标题】:Extract number from a column with text & number从带有文本和数字的列中提取数字
【发布时间】:2021-12-01 20:02:51
【问题描述】:

我有一个如下所示的数据框列:

Chr1 Chr14 Chr19 Chr2 Chr8 Chr7

我想创建一个如下所示的新列: 1 14 19 2 8 7

我试过这段代码,但它对我不起作用: New$CHR_1 % as.integer

【问题讨论】:

  • ´substr(OLD$CHR, 4, nchar(OLD$CHR))´
  • 尝试:substring(OLD$CHR, 4) 而不是 substr(OLD$CHR, 4, 4)
  • 它只是在我的控制台中打印输出。我可以对数据框本身进行更改吗?谢谢
  • New$CHR_1 <- as.integer(substring(OLD$CHR, 4))
  • 找不到对象“新”

标签: r dataframe numbers extract


【解决方案1】:

您可以使用readr::parse_number 从列中提取数字。

OLD <- data.frame(CHR = c("Chr1", "Chr14", "Chr19", "Chr2", "Chr8", "Chr7"))
OLD$num <- readr::parse_number(OLD$CHR)
OLD

#    CHR num
#1  Chr1   1
#2 Chr14  14
#3 Chr19  19
#4  Chr2   2
#5  Chr8   8
#6  Chr7   7

【讨论】:

    【解决方案2】:

    请在下面找到包含 data.tablestringr 包的解决方案。您只需要使用以下代码行:

    REPREX

    • 您的数据
    library(data.table)
    library(stringr)
    
    # Create your data.frame
    OLD <- data.frame(CHR = c("Chr1", "Chr14", "Chr19", "Chr2", "Chr8", "Chr7"))
    
    • 代码
    # Convert into data.table
    setDT(OLD)
    
    # Add a column "Chr_ID" containing the numbers
    OLD[ , Chr_ID := lapply(.SD, str_extract,"(?<=^Chr)\\d+"), .SDcols = "CHR"]
    
    • 输出
    OLD
    #>      CHR Chr_ID
    #> 1:  Chr1      1
    #> 2: Chr14     14
    #> 3: Chr19     19
    #> 4:  Chr2      2
    #> 5:  Chr8      8
    #> 6:  Chr7      7
    

    reprex package (v2.0.1) 于 2021 年 10 月 13 日创建

    【讨论】:

    • 再次感谢,但它再次在控制台中显示输出,而不是修改 df :(
    • 好的。我编辑我的答案
    • @Mahan 我的编辑最终解决了您的问题吗?如果是,请将答案标记为已接受,以便其他用户更容易找到正确答案。如果不是,请写出问题所在。
    • 我试过你的代码 - 但我只看到一个带有 NA 的新列 - 它是一个空列!
    • 好的。抱歉,我无法为您提供更好的帮助,很高兴看到 Ronak 提出的解决方案对您有用。也就是说,我仍然想知道为什么我建议的代码可以在我的计算机上运行,​​而不是在你的计算机上运行。
    猜你喜欢
    • 2021-11-27
    • 2022-06-11
    • 1970-01-01
    • 2020-10-30
    • 2018-06-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多