Предполагая, что Data$City
является вектором названий городов, а также предполагая, что вы хотите проверить, присутствует ли хотя бы одно из этих названий городов в данном списке, вы можете:
- Сохранить все действительные названия городов в символьном векторе, а именно
validCities
.
- Используйте оператор
%in%
между этими двумя векторами, чтобы получить логический вектор. Этот вектор будет той же длины, что и первый, и в нем будет указано, какие из этих городов содержатся во втором векторе.
- Используйте функцию
sum
, чтобы проверить наличие хотя бы одного положительного значения, то есть проверить, присутствует ли какой-либо из городов, содержащихся в первом векторе, во втором векторе.
Пример ниже.
Data <- data.frame(City = c('Chennai', 'Delhi', 'Bhopal', 'Pune', 'Kolkata'));
validCities <- c('Mumbai', 'Delhi', 'Bengaluru');
if (sum(Data$City %in% validCities) > 0) {
// Your code here.
}
Изменено:
Теперь, когда вы предоставили желаемый результат, я вижу, что это довольно просто. Не зацикливайтесь на подходах, ориентированных на петли, data.frame
можно легко выбирать и фильтровать по строкам, просто предоставьте условие для тех строк, которые вы хотите рассмотреть, и укажите, какие столбцы вы хотите извлечь или изменить.
В этом случае я выбираю те строки, которые CITY
не являются одним из трех представленных, и я присваиваю значение NA
столбцу CITY
:
data <- data.frame(CITY = c('Mumbai', 'Jaipur', 'Delhi', 'Chennai', 'Bengaluru'));
data[!(data$CITY %in% c('Mumbai', 'Delhi', 'Bengaluru')), 'CITY'] <- NA;
Выход:
> data
CITY
1 Mumbai
2 <NA>
3 Delhi
4 <NA>
5 Bengaluru
Кроме того, вы можете просто удалить ненужные строки, в этом случае оставшиеся строки сохранят свое первоначальное имя строки:
data <- data[data$CITY %in% c('Mumbai', 'Delhi', 'Bengaluru'), , drop = FALSE];
Выход:
> data
CITY
1 Mumbai
3 Delhi
5 Bengaluru