用于字典以重新链接某些特定值

时间:2017-03-13 07:51:23

标签: r

我有以下内容

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 - > ħ**。

所以我需要某种字典功能来用特定的东西替换XXX。

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

我使用函数plyr::mapvalues来执行此操作。该函数有三个参数,即用于替换的字符串,以及定义替换的两个向量fromto

e.g。

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

答案 2 :(得分:0)

我切换到了较新的@SpringBootApplication库,因此我将在此处添加另一个答案:

在交互式会话中,我将直接在dplyr中输入替换项:

dplyr::recode

使用预定义词典,由于dplyr::recode(letters[1:3], "b"="x", "c"="y") # [1] "a" "x" "y" 的整洁语义,您必须使用UQS来取消对词典的引用:

dpylr