Некоторое время назад я адаптировал некоторый код из StackOverflow, но мне не удалось найти оригинальный пост.Код отлично работает для моих приложений, но я не совсем понимаю синтаксис.(Код перезаписывает числовые значения в данных конкретными символьными строками, сопоставляя числовое значение данных с соответствующим значением в векторе 'new_labels'. Соответствие зависит от столбца.)
Обращаясь к приведенному ниже коду, может кто-нибудьобъясните, как выражение [apply] используется, чтобы указать, где gsub () выполняет замены?Или, другими словами, как работает этот синтаксис?Почему применение влияет на gsub () здесь?А еще лучше, есть ли более простой подход к этому действию?
# reproducible example
# fake data
dat <- tibble(var1 = c(1,NA, 1,1,1,2,1,NA,1,1),
var2 = c(NA,1,NA,NA,NA,NA,NA,1,NA,NA),
var3 = c(2,2,NA,2,NA,1,2,NA,NA,NA),
var4 = c(NA,NA,2,NA,2,NA,NA,2,2,2))
# names of columns in fake data
variables <- names(dat)
# names of new labels to replace the numeric values
new_labels <- c("elf", "hobbit", "wizard", "ranger")
# empty list
llist <- list(ones = data.frame(matrix(ncol=4,nrow=10)),
twos = data.frame(matrix(ncol=4,nrow=10)))
names(llist[[1]]) <- letters[1:length(new_labels)]
names(llist[[2]]) <- letters[1:length(new_labels)]
# for loops
for(j in 1:2){
for(i in 1:length(new_labels)){
llist[[j]][, letters[i]] <- gsub(variables[i], new_labels[i], names(dat[,variables[i]]))[apply(dat[,variables[i]], 1, match, x= j)]
}
llist[[j]][is.na(llist[[j]])] <- ""
}