我有以下几点
list <- c("AB", "G", "H")
现在我有一些应该被替换的信件。太好了。应更换B和H.
所以我没有的是:
replace_letter <- c("B", "H")
for(letter in replace_letter){
for (i in list){
print(i)
print(letter)
if(grepl(letter, i)){
new_value <- gsub(letter,"XXX",i)
print("yes")
}
else{
print("no")
}
}
}
但是,我的代码中的XXX应该替换为某些查找值/。所以改为B - > B +,而不是H - > H **。
所以我需要某种字典功能来用特定的东西替换XXX。
有没有人建议我如何将其包含在上面的代码中?
数据和字典
dictionary <- data.frame(From = LETTERS,
To = LETTERS[c(2:length(LETTERS), 1)], stringsAsFactors = F)
set.seed(1234)
data <- LETTERS[sample(length(LETTERS), 10, replace = T)]
这是替换功能
replace <- function(input, dictionary){
dictionary[which(input == dictionary$From),]$To
}
将其应用于数据:
sapply(data, replace, dictionary = dictionary)
# C Q P Q W Q A G R N
# "D" "R" "Q" "R" "X" "R" "B" "H" "S" "O"
您只需根据需要调整字典。
我使用函数plyr::mapvalues
来做到这一点。该函数有三个参数,即用于替换的字符串,以及定义替换的两个向量from
和to
。
EG
plyr::mapvalues(letters[1:3], c("b", "c"), c("x", "y"))
# [1] "a" "x" "y"
我切换到了较新的dplyr
库,所以我将在这里添加另一个答案:
在交互式会话中,我将直接在dplyr::recode
中输入替换内容:
dplyr::recode(letters[1:3], "b"="x", "c"="y")
# [1] "a" "x" "y"
使用预定义的字典,由于UQS
的整齐eval语义,你必须使用dpylr
取消引用字典:
dict <- c("b"="x", "c"="y")
dict
# b c
# "x" "y"
dplyr::recode(letters[1:3], UQS(dict))
# [1] "a" "x" "y"