#r
#r
Вопрос:
У меня есть фрейм данных All_companies
, и я сравниваю COMPANY_NUMBER
в столбце 1 со следующим элементом в том же столбце
COMPANY_NUMBER COMPANY_NAME
444444 ABC
444444 ABC
555555 XYZ
555555 XYZ
Код
for (i in 1:(nrow(All_companies)-1)) {
if(All_companies[i, 1] == All_companies[i 1, 1])
{
print("Match")
}
else if (All_companies[i, 1] != All_companies[i 1, 1])
{
print("No Match")
}
}
Код выполняется нормально, но я получаю сообщение об ошибке после завершения выполнения кода-
Ошибка в if (All_companies[i, 1] == All_companies[i 1, 1]) { : отсутствует значение, где требуется TRUE / FALSE
Есть мысли о том, как я могу с этим справиться? Заранее большое спасибо.
Комментарии:
1. Есть ли у вас
NA
‘s в данных?
Ответ №1:
Извините, я не понимаю этот синтаксис, но разве основной цикл не должен быть for (i in 1:(nrow(All_companies)-2)) {
?
Комментарии:
1. с (i в 1:(nrow(All_companies) -2)) он по-прежнему выдает точно такую же ошибку
Ответ №2:
Если сравнение внутри if
инструкции является NA, то оно завершается с ошибкой:
if (NA) {
print("Match")
}
#> Error in if (NA) print("Match") : missing value where TRUE/FALSE needed
Итак, у вас, вероятно, есть некоторые NA
‘s в вашем All_companies
наборе данных, потому что сравнение чего-либо с NA
есть NA
.
С NA
выдает ошибку:
All_companies <- read.table(header = T, text = "
COMPANY_NUMBER COMPANY_NAME
444444 ABC
444444 ABC
555555 XYZ
555555 XYZ
NA ABC
")
for (i in 1:(nrow(All_companies)-1)) {
if (All_companies[i, 1] == All_companies[i 1, 1])
{
print("Match")
}
else if (All_companies[i, 1] != All_companies[i 1, 1])
{
print("No Match")
}
}
#> [1] "Match"
#> [1] "No Match"
#> [1] "Match"
#> Error in if (All_companies[i, 1] == All_companies[i 1, 1]) {: missing value where TRUE/FALSE needed
Без NA он запускается:
All_companies <- read.table(header = T, text = "
COMPANY_NUMBER COMPANY_NAME
444444 ABC
444444 ABC
555555 XYZ
555555 XYZ
")
for (i in 1:(nrow(All_companies)-1)) {
if (All_companies[i, 1] == All_companies[i 1, 1])
{
print("Match")
}
else if (All_companies[i, 1] != All_companies[i 1, 1])
{
print("No Match")
}
}
#> [1] "Match"
#> [1] "No Match"
#> [1] "Match"
Создано 2020-08-13 пакетом reprex (версия 0.3.0)
Комментарии:
1. Пропущенных значений нет, однако не все COMPANY_NUMBERS являются числовыми числами, некоторые из них являются буквенно-цифровыми, например 333333A
2. Привет @Ahson, буквенно-цифровые значения не должны иметь значения… должна быть еще одна иголка в стоге сена. Пожалуйста, проверьте выходные данные
summary(All_companies)
, если есть какие-либо NA, NaN, NULL или что-то неожиданное. Дело в том, что ваш код, похоже, в порядке, просто есть какая-то проблема со столбцом данных.
Ответ №3:
Да, действительно, отсутствовали значения. Однако, даже с отсутствующим значением, когда я добавил isTRUE
в код, он выполнялся без сообщения об ошибке.
if(isTRUE(All_companies[i, 1] == All_companies[i 1, 1]))