Я хочу использовать списки выражений для кодирования нового поля.Использование списков шаблонов для кодирования нового поля
В моей информационной структуре Bisaccategory1 содержит полное описание категории книг. Конкретные строки, представляющие частичные значения в этом поле, могут использоваться для определения нового поля под названием «Жанр». Один конкретный жанр будет «научной», который отображает 25 уникальных полных описаний. Я могу идентифицировать эти полные описания, указав определенные закономерности, которые содержатся в них:
nonfiction<-c("BIOGRAPHY & AUTOBIOGRAPHY","BODY, MIND & SPIRIT","BUSINESS & ECONOMICS","COMICS & GRAPHIC NOVELS",
"COMPUTERS","COOKING","FAMILY & RELATIONSHIPS","HEALTH & FITNESS","HISTORY","HOUSE & HOME","HUMOR",
"LITERARY CRITICISM","NATURE","PERFORMING
ARTS","PETS","PHOTOGRAPHY","POETRY","POLITICAL SCIENCE","RELIGION",
"SCIENCE","SELF-HELP","SOCIAL SCIENCE","SPORTS & RECREATION","TRANSPORTATION","TRUE CRIME")
я могу затем сопоставить эти строки для завершения значения Biscategory1 следующим образом:
matches <- unique (grep(paste(nonfiction,collapse="|"),
detail$Bisaccategory1, value=TRUE))
Но я неясно о том, как использовать эти «совпадения», чтобы присвоить значение «неопубликование» моему новому жанровому полю.
Это образец данных:
structure(list(Author = c("James Swallow", "Billy Crystal", "Mark Divine",
"Charles Cumming", "Victoria Schwab", "Louise Penny", "Elizabeth Warren",
"Linda Castillo", "Paul Fischer", "Sandy Hall", "Louise Penny",
"Louise Penny", "Lisa Scottoline", "Linda Castillo", "Evan Osnos",
"Porter Erisman"), Title = c("24: Deadline", "700 Sundays - Still Foolin' 'Em",
"8 Weeks to Sealfit", "A Colder War", "A Dark Shade of Magic",
"A Fatal Grace", "A Fighting Chance", "A Hidden Secret", "A Kim Jong-Il Production",
"A Little Something Different", "A Rule Against Murder", "A Trick of the Light",
"Accused", "After the Storm", "Age of Ambition", "Alibaba's World"
), Bisac = c("FICTION/Thrillers/General", "BIOGRAPHY & AUTOBIOGRAPHY/Entertainment & Performing Arts",
"HEALTH & FITNESS/Exercise", "FICTION/Thrillers/Espionage",
"FICTION/Fantasy/Historical", "FICTION/Mystery & Detective/Traditional",
"BIOGRAPHY & AUTOBIOGRAPHY/Political", "FICTION/Mystery & Detective/Police Procedural",
"HISTORY/Asia/Korea", "JUVENILE FICTION/Love & Romance",
"FICTION/Mystery & Detective/Traditional", "FICTION/Mystery & Detective/Traditional",
"FICTION/Thrillers/Legal", "FICTION/Mystery & Detective/Police Procedural",
"HISTORY/Asia/China", "BUSINESS & ECONOMICS/E-Commerce/General"
)), .Names = c("Author", "Title", "Bisac"), class = "data.frame", row.names = c(NA,
-16L))
Я знаю, что я могу сделать что-то вроде:
df$Genre[Bisaccategory1=="BODY, MIND & SPIRIT/Inspiration & Personal Growth"]<-"nonfiction"
, но у меня есть сотни категорий, и это на самом деле не масштабируется. Буду признателен за любые предложения.