【发布时间】:2020-11-11 03:36:11
【问题描述】:
我有一个如下图的数据框:
c("3.2% 1ST $100000 AND 1.1% BALANCE", "3.3% 1ST $100000 AND 1.2% BALANCE AND $3000 BONUS FULL PRICE ONLY",
"$4000", "3.3% 1ST $100000 AND 1.2% BALANCE", "3.3% 1ST $100000 AND 1.2% BALANCE",
"3.2% 1ST $100000 1.1% BALANCE")
[1] "3.2% 1ST $100000 AND 1.1% BALANCE"
[2] "3.3% 1ST $100000 AND 1.2% BALANCE AND $3000 BONUS FULL PRICE ONLY"
[3] "$4000"
[4] "3.3% 1ST $100000 AND 1.2% BALANCE"
[5] "3.3% 1ST $100000 AND 1.2% BALANCE"
[6] "3.2% 1ST $100000 1.1% BALANCE"
一般来说,我可以说所有的 cmets 都是这种形式:
x.y% 1ST abcdef AND a.b% BALANCE (它可以有第四个数字作为奖励。这个数据框有 52000 行,所以绝对不可能捕获各种 cmets,但总的来说,我上面提到的格式是一个很好的起始格式)。
我想知道如何提取这些 cmets 中的每个数字并将它们保存为数据框格式。例如,我想要一个这样的数据框:
First% cut-off second% Bonus
1 3.2 100000 1.1 NA
2 3.3 100000 1.2 3000
3 NA NA NA NA
4 3.3 100000 1.2 NA
5 3.3 100000 1.2 NA
6 3.2 100000 1.1 NA
我大概可以使用str_subset 和这样的模式:
str_subset(data$comment, "(\\d\\.\\d)% 1ST \\$(\\d{3,8}) AND (\\d\\.\\d)% BALANCE \\w+")
但是str_subset 完全返回字符串,我不确定如何单独保存每个部分。我也查了这个链接Extract a regular expression match,看来str_extract是个不错的选择;但是,仅用于检查一种模式。就我而言,如果我提取\\d\\.\\d%,则不清楚是提取第一个数字还是提取第二个数字。
谢谢
【问题讨论】: