我有以下数据。
library(data.table)
dt1 <- as.data.table(data.frame(
relative.1 = c("up", "down", "up", "down", "down",
"up", "up", "up", "down", "down"),
color.1 = c(
"<span style= color: red !important; >0.00239377213823793</span>",
"<span style= color: red !important; >0.0189475913373258</span>",
"<span style= color: red !important; >0.000944874682014027</span>",
"<span style= color: red !important; >0.00115563834695583</span>",
"<span style= color: red !important; >0.00190146895689528</span>",
"<span style= color: red !important; >0.00905363339565874</span>",
"<span style= color: red !important; >0.00786719465124788</span>",
"<span style= color: red !important; >0.0021806607355806</span>",
"<span style= color: black !important; >0.0677967189492317</span>",
"<span style= color: black !important; >0.0643565809998716</span>"
), stringsAsFactors = FALSE))
我想替换">"中的数字字符。和";& lt;"与列的对应行中的字符串"相对"。例如,在第一行中,我想替换为"0.00239377213823793";与"up".
请指教。
数据。table包使用一个就地更新操作符:=
来允许您高效地更新列。您可以引用data.table范围内的其他列。对字符串进行编辑有多种方法,虽然正则表达式不适合解析HTML,但下面的模式适用于这里的示例。
dt1[, color.1 := stringr::str_replace(
string = color.1,
pattern = "[0-9.]+",
replacement = relative.1)]
dt1
# relative.1 color.1
# 1: up <span style= color: red !important; >up</span>
# 2: down <span style= color: red !important; >down</span>
# 3: up <span style= color: red !important; >up</span>
# 4: down <span style= color: red !important; >down</span>
# 5: down <span style= color: red !important; >down</span>
# 6: up <span style= color: red !important; >up</span>
# 7: up <span style= color: red !important; >up</span>
# 8: up <span style= color: red !important; >up</span>
# 9: down <span style= color: black !important; >down</span>
# 10: down <span style= color: black !important; >down</span>
dt1[, color.1 := sub('(?<=>)[0-9]+\.[0-9]+(?=<)', relative.1, color.1, perl = TRUE), by = relative.1]
# relative.1 color.1
# 1: up <span style= color: red !important; >up</span>
# 2: down <span style= color: red !important; >down</span>
# 3: up <span style= color: red !important; >up</span>
# 4: down <span style= color: red !important; >down</span>
# 5: down <span style= color: red !important; >down</span>
# 6: up <span style= color: red !important; >up</span>
# 7: up <span style= color: red !important; >up</span>
# 8: up <span style= color: red !important; >up</span>
# 9: down <span style= color: black !important; >down</span>
# 10: down <span style= color: black !important; >down</span>