用于字典以替换某些特定值

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

我有以下几点

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。

有没有人建议我如何将其包含在上面的代码中?

r
3个回答
1
投票

数据和字典

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"

您只需根据需要调整字典。


1
投票

我使用函数plyr::mapvalues来做到这一点。该函数有三个参数,即用于替换的字符串,以及定义替换的两个向量fromto

EG

plyr::mapvalues(letters[1:3], c("b", "c"), c("x", "y"))
# [1] "a" "x" "y"

0
投票

我切换到了较新的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"
© www.soinside.com 2019 - 2024. All rights reserved.