Я надеюсь, что кто-то может мне помочь, так как мой нынешний подход с grepl не приводит ни к чему, что работает
У меня есть несколько категорий (хранятся в виде символов). Теперь я хочу создать переменную, которая принимает разные значения для разных категорий.
Данные выглядят следующим образом
category
Candidate Biography
Candidate Biography
Candidate Biography
Candidate Biography, Campaign Finance
Justice, Candidate Biography, Economy
Candidate Biography, Jobs
Economy, Education, Candidate Biography
Economy, Civil Rights, Candidate Biography
Теперь я хочу создать новые переменные, которые могут принимать различные значения в соответствии с категорией, как показано ниже
category CandBio Economy CivilRights Family
Candidate Biography 1 0 0 0
Candidate Biography 1 0 0 0
Candidate Biography 1 0 0 0
Candidate Biography, Campaign Finance 0.5 0.5 0 0
Justice, Candidate Biography, Economy 0.33 0.33 0.33 0
Candidate Biography, Jobs 0.5 0.5 0 0
Economy, Education, Candidate Biography 0.33 0.33 0 0.33
Economy, Civil Rights, Candidate Biography 0.33 0.33 0.33 0
Каждая категория имеет определенный коэффициент для каждой переменной (и может загружаться в разные категории). Например. «Биография кандидата, финансирование кампании» загружается на CandBio и Экономику по 0,5 каждый. Категории повторно встречаются для многих наблюдений в наборе данных. (в общей сложности 49 тыс. объектов со 120 различными категориями, которые должны быть объединены в 10 переменных, например, CandBio, Economy, CivilRights и т. д.)
Сначала я попробовал объединить ifelse и grepl, но понял, что grepl очень чувствителен к порядку и что я могу получить классификацию ошибок для каждой категории в зависимости от того, как я структурирую свой ifelse. Также я попытался получить vactors со всеми категориями, которые имеют одинаковое число, и затем включить вектор в функцию grepl, но это тоже не сработало.
Так что я ищу любое решение, которое поможет мне присвоить свои веса переменной в зависимости от текста категории.
Я надеюсь, что смогу четко описать свою проблему, и я с нетерпением жду любой помощи, которая очень ценится! Заранее большое спасибо!
РЕДАКТИРОВАТЬ: Пока я пробовал это таким образом, но безуспешно:
clintontvad$CandidateBiography <- ifelse(ifelse(grepl("Candidate Biography", clintontvad$subjects),1,
ifelse(grepl("Candidate Biography, Marriage, Gays and Lesbians, Civil Rights, Immigration, Trade, Energy, Workers", clintontvad$subjects), 0.125,
ifelse(grepl("Candidate Biography, Terrorism, Islam, Foreign Policy, Nuclear, Iran", clintontvad$subjects),0.17,
ifelse(grepl("Children, Candidate Biography, Families, Education, Debt, Economy, Jobs", clintontvad$subjects),0.17,
ifelse(grepl("Candidate Biography, Children, Education, Health Care, Women", clintontvad$subjects), 0.2,
ifelse(grepl("Candidate Biography, Civil Rights, Islam, Gays and Lesbians, Women", clintontvad$subjects), 0.2,
ifelse(grepl("Candidate Biography, Economy, Election, Children, Families", clintontvad$subjects), 0.2,
ifelse(grepl("Children, Education, Women, Economy, Families", clintontvad$subjects), 0.2,
ifelse(grepl("Job Accomplishments, Abortion, Women, Health Care, Climate Change, Marriage", clintontvad$subjects), 0.2,
ifelse(grepl("Women, Civil Rights, Gays and Lesbians, Foreign Policy, Canddate Biography", clintontvad$subjects), 0.25,
ifelse(grepl("Poverty, Health Care, Candidate Biography, Terrorism", clintontvad$subjects), 0.25,
ifelse(grepl("Job Accomplishments, Foreign Policy, Health Care, Children", clintontvad$subjects), 0.25,
ifelse(grepl("Foreign Policy, Terrorism, Candidate Biography", clintontvad$subjects),0.25,
ifelse(grepl("Ethics, Terrorism, Candidate Biography", clintontvad$subjects),0.25, 0)))))))))))))