У меня есть два кадра данных в R:
city price bedroom
San Jose 2000 1
Barstow 1000 1
NA 1500 1
Код для воссоздания:
data = data.frame(city = c('San Jose', 'Barstow'), price = c(2000,1000, 1500), bedroom = c(1,1,1))
и:
Name Density
San Jose 5358
Barstow 547
Код для воссоздания:
population_density = data.frame(Name=c('San Jose', 'Barstow'), Density=c(5358, 547));
Я хочу создать дополнительный столбец с именем city_type
в наборе данных data
на основе условий, поэтому, если плотность населения города превышает 1000, это город, ниже 1000 - пригород, и NAравен NA.
city price bedroom city_type
San Jose 2000 1 Urban
Barstow 1000 1 Suburb
NA 1500 1 NA
Я использую цикл for для условного потока:
for (row in 1:length(data)) {
if (is.na(data[row,'city'])) {
data[row, 'city_type'] = NA
} else if (population[population$Name == data[row,'city'],]$Density>=1000) {
data[row, 'city_type'] = 'Urban'
} else {
data[row, 'city_type'] = 'Suburb'
}
}
Цикл for выполняется без ошибок в моем исходном наборе данных с более чем 20000 наблюдениями;тем не менее, он дает много неправильных результатов (по большей части дает NA).
Что здесь пошло не так и как я могу добиться большего, чтобы достичь желаемого результата?