我有一个数据框,其中包含两个字符数相同的字符串变量。这些字符串代表学生对某些考试的回答。第一个字符串包含每个正确回答的问题和每个错误项目的错误回答的 + 号。第二个字符串包含所有正确答案。我想用第二个字符串中的正确答案替换第一个字符串中的所有 + 符号。可以使用以下代码创建简化的启发式数据集:
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
在相同的位置。
关于用来自另一个等长字符串变量的字符替换字符串变量中的给定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645099/