我尝试使用gsub解决此问题,但这太困难了。我不知道如何告诉函数只返回某些数字,而不返回其他数字。

我的问题:
我有一个很大的数据框,其中每个执行的测试都有一列test.comments。它是一大段文本,其中只有某些数字是我感兴趣的。

例:

**对BK病毒有积极作用**解释:在该患者标本中,每毫升尿液检测到18,900,000,000 BKV基因组当量/ ...... ................................................... ................................................... ...................... 10个测试样本中的1个...有问题请致电555-122-634

我想做的是在单独的列中添加值18,900,000,000(而不是电话号码和其他随机数)。

有时,数字用_______括起来:

**对BK病毒呈阳性**解释:检测到每毫升__33,400,000 ____ BK病毒(BKV)基因等效量

在某些情况下,数量也很少:

在该患者标本中检测到每毫升900 BK病毒(BKV)基因组当量

要么

**对BK病毒有积极作用**解释:在该患者标本中,每毫升检测到的计算得出的____
我希望有一个可以返回的健壮命令

189亿

33,400,000

900


这也将有助于我拥有一个仅返回数字> 1,000的命令,并且我可以手动编辑其他情况。

但是必须有一个更优雅的解决方案?

编辑:
感谢大家的帮助,Sven的解决方案最适合我!

最佳答案

这是sub的可能解决方案:

sub(".*?([<>]?[,0-9]+)[ _]+BK.*", "\\1", vec)
# [1] "18,900,000,000" "33,400,000"     "900"            "<250"

其中vec是包含4个示例的向量。

09-28 10:03