Поскольку существует много пустых элементов, мы можем создать индекс, который проверяет, есть ли хотя бы один элемент. Подмножество list
и replace
основано на шаблоне
i1 <- lengths(tryout) > 0
tryout[i1] <- lapply(tryout[i1], function(x) replace(x, x == 'stomach:biopsy', 1))
Если это частичное совпадение, используйте grep
, как в сообщении ОП
tryout[i1] <- lapply(tryout[i1], function(x)
replace(x, grep('stomach:biopsy', x), 1))
Обновление
Основываясь на комментариях от OP, необходимо заменить несколько шаблонов. В этом случае лучше создать набор данных key / val или именованный вектор, а затем выполнить left_join/match
и т. Д. В этом случае, поскольку это частичное совпадение, было бы лучше использовать regex_left_join
из fuzzyjoin
library(fuzzyjoin)
library(tidyverse)
# create a key/val tibble
d1 <- tibble(key = c("stomach:biopsy", "colon:biopsy",
"oesophagus:biopsy"), val = 1:3)
# loop through the list elements having at least one element
# left join with the key/val dataset
# pull the column of 'val'
# update the list elements
tryout[i1] <- map(tryout[i1], ~
tibble(key = .x) %>%
regex_left_join(d1) %>%
pull(val))