我有一个包含 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
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。