用另一个文本替换字符变量的文本

问题描述 投票:0回答:1

我有一个包含 2 列(2 个变量)的数据框。一个是字符变量,即作者姓名,另一个是相应作者的文章出现频率。

作者姓名不匹配。特别的是,其中一个出现为罗德里格斯A,另一个出现为罗德里格斯AR,但两者是同一个人

AU                    frequency
Rodriguez AR            20
Rodriguez A              7

这个想法是考虑所有 Rodriguez AR,因此我编码了

authortable$AU <- str_replace_all(authortable$AU, "Rodriguez A", "Rodriguez AR")

但是数据帧没有变化。 有什么建议

我想要得到的是

AU                    frequency
Rodriguez AR            27
r string character
1个回答
0
投票
authortable <- data.frame(AU = rep(c("Rodriguez A", "Rodriguez AR"), c(7, 20)))
authortable |> dplyr::count(AU)
##             AU  n
## 1  Rodriguez A  7
## 2 Rodriguez AR 20

如果您使用建议的解决方案,您可以看到数据框确实发生了变化,但不是按照您预期的方式变化:

authortable$AU <- stringr::str_replace_all(authortable$AU, "Rodriguez A", "Rodriguez AR")
> authortable |> dplyr::count(AU)
             AU  n
1  Rodriguez AR  7
2 Rodriguez ARR 20

换句话说,这将“Rodriguez A”更改为“Rodriguez AR”,将“Rodriguez AR”更改为“Rodriguez ARR”。

回到原始数据框,一种可能是使用

^
(字符串开头)和
$
(字符串结尾)字符来指示您只想更改 complete 字符串“罗德里格斯A”

authortable$AU <- stringr::str_replace_all(authortable$AU, "^Rodriguez A$", "Rodriguez AR")
authortable |> dplyr::count(AU)
            AU  n
1 Rodriguez AR 27

如果您需要进行大量此类数据清理,您可能需要看看Open Refine

© www.soinside.com 2019 - 2024. All rights reserved.