将字符串变量中的给定字符替换为另一个长度相等的字符串变量中的字符

我有一个数据框,其中包含两个字符串变量,字符数相同.这些字符串代表学生对某些考试的回答.第一个字符串包含正确回答每个问题的符号以及每个错误项目的错误响应.第二个字符串包含所有正确的答案.我想用第二个字符串中的正确答案替换第一个字符串中的所有符号.可以使用以下代码创建简化的启发式数据集:

df <- data.frame(v1 = c("+AA+B", "D++CC", "A+BAD"), 
                 v2 = c("DBBAD", "BDCAD","CDCCA"), stringsAsFactors = FALSE)

所以df $v1中的符号需要替换为df $v2中与字符串开头距离相同的字母.有任何想法吗?

最佳答案
当df $v1和df $v2是我们可能使用的字符时

regmatches(df$v1, gregexpr("\\+", df$v1)) <- regmatches(df$v2, gregexpr("\\+", df$v1))

那是,

df <- data.frame(v1 = c("+AA+B", "D++CC", "A+BAD"), 
                 v2 = c("DBBAD", "BDCAD", "CDCCA"), 
                 stringsAsFactors = FALSE)
rg <- gregexpr("\\+", df$v1)
regmatches(df$v1, rg) <- regmatches(df$v2, rg)
df
#      v1    v2
# 1 DAAAB DBBAD
# 2 DDCCC BDCAD
# 3 ADBAD CDCCA

rg包含df $v1中“”的位置,我们方便地利用regmatches将df $v1中的匹配替换为df $v2中相同位置的任何匹配.

转载注明原文:将字符串变量中的给定字符替换为另一个长度相等的字符串变量中的字符 - 代码日志