У меня есть цикл for, использующий grepl для сопоставления аббревиатуры в столбце информационного кадра с ключом словаря и создания столбца со значением словаря этих ключей для привязки к исходному информационному фрейму.
У меня естьцикл for и код, который работает / дает мне то, что мне нужно.
#Example dataframe to loop over
loop <- data.frame(
acronym = c("cmr", "cmr", "den", "den", "nmw", "nmw"),
profession = c("chinese medical practitioner", "chinese medical practitioner",
"dentist", "dentist", "medical practitioner", "nurse"),
stringsAsFactors = FALSE
)
#The dictionary I created to provide values to each key
dic <- list(
cmr = "chinese medical practitioner",
den = "dentist",
med = "medical practitioner",
nmw = "nurse"
)
Цикл for со списком, созданным для хранения значений словаря для каждой итерации, где есть совпадение междуacronym
в кадре данных и ключ в словаре.Затем я связываю незарегистрированный список значений с фреймом данных loop
.Этот пример «исправляет» столбец profession
в цикле, поэтому данные очищаются с использованием словаря и столбца acronym
.
column <- list()
for (i in 1:length(loop$acronym)){
for (j in 1:length(dic)){
if (grepl(names(dic)[j], loop$acronym[i], loop$code)){
column[i] <- dic[j]
}
}
}
cbind(unlist(column),loop)
НО, я хочу решить проблему с помощью apply иличто-то из загадочного мира.Я действительно не хочу решения из data.table, если только это не удивительно, тогда я мог бы начать изучать data.table.