#r
Вопрос:
У меня есть набор данных с переменной «образование», которая кодируется по-разному в каждой из трех включенных стран, например:
Код | Страна 1 | Страна 2 | Страна 3 |
---|---|---|---|
1 | Никакого образования | Никакого образования | Никакого образования |
2 | Первичный | Первичный | Исламское образование |
3 | Вторичный | Вторичный | Первичный |
4 | NA | NA | Вторичный |
Мне нужно применить уровни факторов, которые различны для каждой страны.
Ниже приведена моя попытка, но, похоже, она не работает:
df <- data.frame(
Country = sample(c("Country 1", "Country 2", "Country 3"), 100, replace = TRUE),
Education_1 = sample(1:4)
)
df$Education <-
if(df$Country == "Country1") {
factor(df$Education,
levels = c(1:4),
labels = c("No education", "Primary", "Secondary", "NA"))
} else if (df$Country == "Country2") {
factor(df$Education,
levels = c(1:4),
labels = c("No education", "Primary", "Secondary", "NA"))
} else {
factor(df$Education,
levels = c(1:4),
labels = c("No education", "Islamic education", "Primary", "Secondary")
)
}
Спасибо
Комментарии:
1. Выбранный подход, вероятно, зависит от того, что вы хотите сделать с данными и факторами? Если бы вы могли поделиться этим, это было бы полезно. Обычно это переводится в длинный формат, поэтому вам нужна только одна переменная со значениями образования, и вы можете управлять этим с помощью 5 уровней.
2. Мне нужно применить уровни к фактору для описательного/ модельного анализа. Проблема, которую я пытаюсь преодолеть, заключается в том, что код 2 (например) означает что-то другое в зависимости от страны, поэтому мне интересно, как это объяснить
3. может быть, использование пятиуровневого кода в соответствии
c(1 = "No education", 2 = "Islamic education", 3 = "Primary", 4 = "Secondary", 999 = NA)
с этим решит проблему?4. Да, это было бы идеально — но я унаследовал этот файл с фанковым кодированием — я могу разделить страны, применить уровни в зависимости от страны и объединить
Ответ №1:
Может быть, это поможет? Это берет данные из таблицы, отображающей страны с кодом образования и категорией образования, и преобразует их в длинный формат.
Затем используйте левое соединение с двумя столбцами фрейма данных со странами и кодами образования.
Вы можете использовать полученный столбец с типом образования в качестве строки, или коды могут быть перекодированы для обеспечения согласованности.
library(dplyr)
library(tidyr)
library(stringr)
df <- data.frame(
Country = sample(c("Country 1", "Country 2", "Country 3"), 100, replace = TRUE),
Education_1 = sample(1:4))
df_ed <- structure(list(Code = 1:4, Country.1 = c("No education", "Primary",
"Secondary", NA), Country.2 = c("No education", "Primary", "Secondary",
NA), Country.3 = c("No education", "Islamic education", "Primary",
"Secondary")), class = "data.frame", row.names = c(NA, -4L))
df_levels <-
df_ed %>%
pivot_longer(-Code) %>%
mutate(name = str_replace(name, "\.", " "))
df1 <-
df %>%
left_join(df_levels, by = c("Country" = "name", "Education_1" = "Code"))
head(df1)
#> Country Education_1 value
#> 1 Country 1 3 Secondary
#> 2 Country 2 4 <NA>
#> 3 Country 3 1 No education
#> 4 Country 1 2 Primary
#> 5 Country 3 3 Primary
#> 6 Country 2 4 <NA>
Создано 2021-09-22 пакетом reprex (v2.0.0)