У меня есть набор данных, содержащий такие переменные, как имя, национальность и пол.Я хочу проверить правильность половой переменной этого набора данных на основе набора эталонных данных, который содержит правильные значения пола для каждой комбинации имя-национальность.
Рассмотрим два примеранаборы данных ниже:
# Real data set that should be validated
df_real <- data.frame(name = c("Kevin", "Marie", "Rute", NA, "Charles", "Bruno"),
nationality = c("USA", "DE", "PT", "FR", NA, "PT"),
sex = c(1, 2, 1, 2, 2, NA)) # 1 = Male; 2 = Female
# Correct data set as basement for validation
df_check <- data.frame(name = c("Alfons", "Kevin", "Kevin", "Kevin", "Rute", "Charles", "Bruno", "Anne"),
nationality = c("FR", "USA", "DE", "PT", "PT", "FR", "PT", "LU"),
sex = c(1, 1, 1, 1, 2, 1, 1, 2))
Пол столбца df_real
должен быть проверен на правильность на основе df_check
.В этом примере все значения пола будут правильными, кроме третьей строки (т. Е. Rute должна быть женщиной в df_real
).
Необходимо учитывать несколько дополнительных условий данных:
df_real
имеет несколько NA.Если какое-либо значение строки в df_real
равно NA, проверка этой строки должна быть пропущена. - Имена, встречающиеся в
df_real
, не всегда встречаются в df_check
.В этом случае проверка этой строки также должна быть пропущена.
Конечным выводом должен быть фиктивный вектор длиной nrow(df_real)
, содержащий 0 (т. Е. Значение верное илипроверка была пропущена) и 1 (то есть значение неверно).
Ожидаемый результат:
output_check <- c(0, 0, 1, 0, 0, 0)
Я пытался решить эту проблему с помощью сложных циклов for и условий if.Однако, поскольку мои данные очень велики, это занимает много времени вычислений.Я уверен, что должно быть более простое решение, основанное на apply()
функциях, которые я, к сожалению, не могу понять.