Переименование нескольких строк в одном столбце определенной длины - PullRequest
1 голос
/ 07 ноября 2019

У меня есть набор данных с колонкой "породы". В настоящее время существует 177 различных пород, и мне нужно уменьшить их до 53, чтобы я мог создать случайный лес. Я хотел бы взять те, которые являются маленькими (например: у нас есть только один афганец) и переименовать их в "другие"

Я пытался использовать операторы ifelse в сочетании с length (unique ())

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Вот один из подходов, хотя, возможно, некоторые из них можно было бы объединить:

dummy_DT <- data.table("Breed" = c(paste("Breed", round(rnorm(1:1000, 500, 100)), sep="")), "Count" = 1)

agg_DT <- aggregate(Count ~ Breed, data=dummy_DT, length)
sorted_DT <- agg_DT[order(-agg_DT$Count),]
pre_Other <- sorted_DT[53:nrow(sorted_DT),]
final_Other <- sorted_DT$Breed[sorted_DT$Count <= max(pre_Other$Count)]
dummy_DT$Cat53 <- ifelse(dummy_DT$Breed %in% final_Other, "Other", dummy_DT$Breed)

Это просто берет число строк для каждой породы, сортируя от наибольших к наименьшим, объединяя все, что меньше, чем 52-я группа (сохраняя все с одинаковым количеством в одной группе (итого <= 53 группы) и помечая их как «Прочее» </p>

> length(unique(dummy_DT$Cat53))
[1] 30
0 голосов
/ 08 ноября 2019

Я сделал это сейчас вручную. Сначала строили круговую диаграмму, а затем выбирали 1/8 наблюдений, которые стали бы "другими".

cats_and_dogs <- transform (cats_and_dogs, newColumn = (ifelse (cats_and_dogs $ breed% в% c ("Domestic"), "Яма", "Лабрадор", "Чихуахуа", "немецкая", "австралийская", "Миниатюра", "Такса", "сиамский", "американская", "Граница", "Боксер", "Джек",»Сибирский "," Великий "," Йоркшир "," Катахула "," Крыса "," Бигль "), as.character (cats_and_dogs $ breed)," other "))) </p>

PS: Крыса на самом делепервое слово породы собаки (:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...