我有三张名单

Example Data

data <- list("A-B", "C-D", "E-F", "G-H", "I-J")
data_to_replace  <- list("A-B", "C-D")
replacement <- list("B-A", "D-C")
## Note: The length(data_to_replace)  and length(replacement ) are always equal. Which may range from 1 to 200

这只是一个最小的例子.我有几个这三个,每个列表的数量都不一样

Expected outcome

data_new <- list("B-A", "D-C", "E-F", "G-H", "I-J")

What I have tried

## function that reverses a string by words
reverse_words <- function(string) {
  ## split string by blank spaces
  string_split <- strsplit(as.character(string), split="-")
  ## How many split terms?
  string_length <- length(string_split[[1]])
  ## decide what to do
  if (string_length == 1) {
    ## one word (do nothing)
    reversed_string <- string_split[[1]]
  } else {
    ## more than one word (collapse them)
    reversed_split <- string_split[[1]][string_length:1]
    reversed_string <- paste(reversed_split, collapse="-")
  }
  ## output
  return(reversed_string)
} 

## Replacemnt
replacement <- lapply(data_to_replace, reverse_words)
data_new <- rapply(data, function(x) {
  replace(x, x == data_to_replace, replacement) ## This last line did not work
})

推荐答案

将输入转换为向量,然后您可以这样做:

## direct replacement
data[data %in% data_to_replace] = replacement[match(data, data_to_replace)]

## or with `ifelse` if you want to save it as a new name 
## and keep `data` unmodified
ifelse(data %in% data_to_replace, replacement[match(data, data_to_replace)], data)

R相关问答推荐

按崩溃类别分类的指数

根据shiny 应用程序中的数字输入更改图标 colored颜色

基于现有类创建类的打印方法(即,打印tibles更长时间)

大规模重新标记haven标签数据

在垂直轴中包含多个ggplot2图中的平均值

如何动态更新selectizeInput?

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

移除仪表板Quarto中顶盖和车身之间的白色区域

将重复项转换为NA

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

R如何将列名转换为更好的年和月格式

扩展R中包含列表的数据框

Rmarkdown::Render vs Source()

如何构建一个for循环来循环处理动物ID?

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

计算来自单独分组的分幅的值的百分位数

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

Broom.Mixed::Augment不适用于Sample::分析