【发布时间】:2020-11-21 00:19:57
【问题描述】:
我想知道如何对字符串中的数字执行基本的数学运算?例如,假设我有一个这样的数据框:
structure(list(Commission20 = c("$3255 1ST $100000 AND 1.2% BALANCE",
"$3255 1ST $100000 AND 1.2% BALANCE", "$1", "1ST $100000 2.5% AND BALANCE 1.2%",
"3.3% AND 1.0%ST $100 - 1.2% BALANCE", "3 % 1ST $100000 AND 1.0% SALE BALANCE"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
# A tibble: 6 x 1
Commission20
<chr>
1 $3255 1ST $100000 AND 1.2% BALANCE
2 $3255 1ST $100000 AND 1.2% BALANCE
3 $1
4 1ST $100000 2.5% AND BALANCE 1.2%
5 3.3% AND 1.0%ST $100 - 1.2% BALANCE
6 3 % 1ST $100000 AND 1.0% SALE BALANCE
佣金的标准形式是a.b% 1ST $abcdef AND m.n% BALANCE,其中a.b% 是一个类似3.3% 的数字,$abcdef 是一个类似$100000 的数字,m.n% 是一个类似1.2% 的数字。从这个数据框中可以看出,$3255 1ST $100000 AND 1.2% BALANCE 不是标准形式。所以我的目标是将$klmn 1ST $abcdef AND m.n% BALANCE形式的only佣金改为标准形式。我应该这样做的方法是划分klmn/abcdef。所以例如一个像这样的字符串:
$3255 1ST $100000 AND 1.2% BALANCE 应替换为 3.2% 1ST $100000 AND 1.2% BALANCE,其中 3.2% 由 3255/100000 计算得出。
我该怎么做?我不确定什么功能让我不仅可以选择这两个数字,还可以将它们分开。所以上面的数据框应该改成:
1 3.2% 1ST $100000 AND 1.2% BALANCE
2 3.2% 1ST $100000 AND 1.2% BALANCE
3 $1
4 1ST $100000 2.5% AND BALANCE 1.2%
5 3.3% AND 1.0%ST $100 - 1.2% BALANCE
6 3 % 1ST $100000 AND 1.0% SALE BALANCE
更改仅适用于第 1 行和第 2 行,因为只有第 1 行和第 2 行匹配 $klmn 1ST $abcdef AND m.n% BALANCE 模式,因此它们应更改为 a.b% 1ST $abcdef AND m.n% BALANCE 模式
【问题讨论】: