我有一个类似于以下可重现的数据框,其中一列包含 HTML 代码:
ID <- c(15, 25, 90, 1, 23, 543)
HTML <- c("[demography_form][1]<div></table<text-align>[demography_form_date][1]", "<text-ali>[geography_form][1]<div></table<text-align>[geography_form_date][1]", "[social_isolation][1]<div></table<div><text-align>[social_isolation_date][1]", "<text-align>[geography_form][1]<div></table<text-align>[geography_form_date][1]", "<div>[demography_form][1]<div></table<text-align>[demography_form_date][1]", "[geography_form][1]<div></table<text-align>[geography_form_date][1]</table")
df <- data.frame(ID, HTML)
我想更新
HTML
列方括号内的整数以反映重复的每个实例。例如,[demography_form] 第二次出现在一行中,我希望它后面的方括号是 :
执行此操作的最佳方法是什么?我正在考虑以某种方式创建一个实例列,然后使用它来更新方括号中的值,最后删除它?提前致谢。
从
[]
from HTML 列中的子字符串创建分组列,使用 []
将
row_number()
中的数字替换为行序列 (
str_replace_all
)
library(dplyr)
library(stringr)
df %>%
group_by(grp = str_extract(HTML, "\\[(\\w+)\\]", group =1)) %>%
mutate(HTML = str_replace_all(HTML, "\\[(\\d+)\\]",
sprintf("[%d]", row_number()))) %>%
ungroup %>%
select(-grp)
-输出
# A tibble: 6 × 2
ID HTML
<dbl> <chr>
1 15 [demography_form][1]<div></table<text-align>[demography_form_date][1]
2 25 <text-ali>[geography_form][1]<div></table<text-align>[geography_form_date][1]
3 90 [social_isolation][1]<div></table<div><text-align>[social_isolation_date][1]
4 1 <text-align>[geography_form][2]<div></table<text-align>[geography_form_date][2]
5 23 <div>[demography_form][2]<div></table<text-align>[demography_form_date][2]
6 543 [geography_form][3]<div></table<text-align>[geography_form_date][3]</table