Я пытаюсь проверить мою математику, где я добавляю две колонки, чтобы создать новый столбец, используя это в этом article:TRUE, FALSE индикатор тождественны сравнение неправильно в R
df$TotalAnimalMathCorrect <- sapply(df$TotalAnimals, identical, df$TotalFemales+df$TotalMales))
Я ищу любые ложные значения это указывает на то, что мое суммирование не работает правильно.
рассчитать женщин и мужчин животных с помощью этого:
df$TotalMales <- apply(subset(df, select = c(Gender.1,Gender.2,Gender.3,Gender.4)), 1, function(x) length(which(x=="Male")))
#convert to a numeric variable
quote_data_in$TotalMales<- as.numeric(quote_data_in$TotalMales)
и
df$TotalFemales <- apply(subset(df, select = c(Gender.1,Gender.2,Gender.3,Gender.4)), 1, function(x) length(which(x=="Female")))
#convert to a numeric variable
quote_data_in$TotalFemales<- as.numeric(quote_data_in$TotalFemales)
Когда я смотрю на данные, я могу видеть, что я добавляю правильно, но так как у меня есть 170000 строк, Я бы хотел сделать двойной чек, если бы TotalAnimals всегда равнялась сумме женщин и мужчин.
Но ... Я всегда получаю ЛОЖЬ для всех значений в моем df $ TotalAnimalMathCorrect, даже если я вижу, что 1 + 1 = 2, значение в df $ TotalAnimalMathCorrect.
Я также проверил и подтвердил, что все три столбца являются числовыми, и он применил as.numeric перед добавлением цифры, как вы можете видеть выше, и здесь
> str(df$TotalMales)
num [1:16929] 1 0 0 1 0 0 0 0 0 0 ...
> str(df$TotalFemales)
num [1:16929] 0 1 1 0 1 0 2 1 1 0 ...
> str(df$TotalAnimals)
num [1:16929] 1 1 1 1 1 1 2 1 1 1 ...
Я также попытался преобразования переменных integer с as.integer вместо as.numeric, чтобы быть более конкретным, но все же каждая строка имеет FALSE для столбца TotalAnimalMathCorrect.
Любые идеи относительно того, почему идентичный вызов не дает ИСТИННОГО, когда цифры явно совпадают? Я прочитал документацию на идентичном here
Вот некоторые примеры данных, что я ожидаю:
> TotalFemales TotalFemales TotalAnimals TotalAnimalMathCorrect
> 1 1 2 TRUE
, но, как я уже сказал, я получаю это:
TotalFemales TotalFemales TotalAnimals TotalAnimalMathCorrect
1 1 2 FALSE
Вот воспроизводимый код ,
df<- data.frame(TotalMales=c(1,1,0),TotalFemales=c(1,0,0),TotalAnimals=c(2,1,0))
TotalMales TotalFemales TotalAnimals
1 1 1 2
2 1 0 1
3 0 0 0
Большое спасибо!
Я буду в скором времени предоставит воспроизводимый набор данных. – Jazzmine
Не может следовать, так как вы не поделились каким-либо воспроизводимым примером. (Итак, вы должны поделиться небольшим * ** воспроизводимым примером ** - [см. Здесь лучшие практики (используйте код 'dput' или код совместного использования)] (http://stackoverflow.com/q/5963269/903061). – Gregor
Возможно, это потому, что я не могу следовать, но почему вы используете 'sapply'? Почему бы не просто« идентичные »(df $ TotalAnimals, df $ TotalFemales + df $ TotalMales)'? Или, может быть, 'all (df $ TotalAnimals == df $ TotalFemales + df $ TotalMales) '? Вы вычисляете эти целые числа странным образом, что может привести к проблемам с точками? – Gregor