【问题标题】:R how to extract part of text based on presence of specific word(s)R如何根据特定单词的存在提取部分文本
【发布时间】:2018-12-01 20:25:43
【问题描述】:

'size' 我的数据集的列包含类似的文本

row_1 =  "Small size From 3 mm long when unfed to 9 mm when fully engorged" 
row_2 =  "Tiny some microscopic Red mite only 0 4 mm diameter Worldwide many different"
row_3 = "Small spiders body length about 10 mm"

size = c(row_1, row_2, row_3)

如何提取新列中的数据,例如“new_size”,如下所示

size_1 = '3mm, 9mm'
size_2 = '4mm'
size_3 = '10mm'

new_size = c(size_1, size_2, size_3)

我已经看到了子字符串方法,但无法找出从每行不同文本中获取大小的方法。

【问题讨论】:

    标签: r text


    【解决方案1】:

    试试这个:

    Numb_Extract <- function(string){
        unlist(regmatches(string,gregexpr("[[:digit:]]+\\.*[[:digit:]]*",string)))
       }
    row_1 =  "Small size From 3 mm long when unfed to 9 mm when fully engorged" 
    p<-as.numeric(Numb_Extract (row_1))
    print(p)
    

    【讨论】:

    • 此函数将为您提供包含每个句子中数字的数组。
    【解决方案2】:

    使用regmatches/gregexpr

    regmatches(size, gregexpr("[[:digit:]]+[[:space:]]mm", size))
    #[[1]]
    #[1] "3 mm" "9 mm"
    #
    #[[2]]
    #[1] "4 mm"
    #
    #[[3]]
    #[1] "10 mm"
    

    如果你想要一个向量,unlist 结果。

    size_n <- regmatches(size, gregexpr("[[:digit:]]+[[:space:]]mm", size))
    unlist(size_n)
    #[1] "3 mm"  "9 mm"  "4 mm"  "10 mm"
    

    【讨论】:

    • 非常感谢。它成功了。感谢如此迅速的反应。还将尝试并了解有关 regmatches / gregexpr 的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多