Я в процессе очистки данных и закончил с большим количеством петель for
. Поскольку у моего набора данных больше 6 миллионов строк, для меня это проблема, но я не уверен, как этого избежать.Как оптимизировать эти петли в R
Пример моего набора данных (так называемый sentencing.df) будет что-то вроде:
Ethnicity PersonNumber
Caucasian 1
Caucasian 1
Unknown 1
Indian 2
Indian 2
Я хочу, чтобы сравнить в пределах одного человека числа - например, я хочу знать, является ли этнических групп для каждого число людей одинаково (а затем изменить неправильные записи, если они существуют). Мой код использует для петель и выглядит примерно так:
PersonListRace <- unique(sentencing.df[sentencing.df$ethnicity == "UNKNOWN",]$PersonNumber)
PersonListRace <- as.numeric(as.character(PersonListRace))
# vector of person numbers for those with ethnicity UNKNOWN
for (i in 1:100) {
race <- sentencing.df[sentencing.df$PersonNumber == PersonListRace[i],]$ethnicity
# creates a vector of unique ethnicities for that person
if (length(unique(race)) != 2) {next}
# excludes those who only have UNKNOWN or who have UNKNOWN plus multiple ethnicities
else {
label <- as.character(unique(race[which(race != "UNKNOWN")]))
sentencing.df[sentencing.df$PersonNumber == PersonListRace[i],]$ethnicity <- label
}
}
Я тогда подобные вещи для всех моих других переменных, и для петель принимать слишком долго, чтобы бежать. Я рассмотрел некоторые другие вопросы и ответы на сайте, но моя основная проблема заключается в том, что я не могу найти способ сравнения только внутри одного и того же номера человека по другой переменной без использования цикла for.
Все, что поможет мне достичь своей цели в практической сроки будет очень признателен :)
Если PersonListRace является фактором, то это неверно: 'PersonListRace <- as.numeric (PersonListRace)'. Должно быть 'PersonListRace <- as.numeric (as.character (PersonListRace))'. Остальная часть вашего кода не была описана на естественном языке очень хорошо, и ваша команда R слишком слаба, чтобы я мог понять, для меня в любом случае. Пожалуйста, опишите на английском, что такое желание. Есть почти наверняка более эффективные методы. Например, является большинством голосов арбитром «правильного» и как обращаться с связями. –
Извините, если это трудно понять - я все еще относительно новичок в R и изучаю, когда я иду. Я не знаю, как объяснить, что мне нужно, кроме того, что я сказал. Моя конечная цель - использовать известные этнические группы для человека - например, кавказский для человека номер 1 - заполнить пробелы в своих других записях - так измените «неизвестную» этническую принадлежность для человека 1 и на «кавказскую». Моя проблема в том, что мне нужно сравнить этнические группы для каждого отдельного человека, чтобы сделать это, и не могу понять, как это сделать без цикла. – user3204746