Предположим, у меня есть кадр данных, такой как ниже
people.dat <- data.frame("ID" = c(2001, 1001, 2005, 2001 5000), "Data"
= c(100, 300, 500, 900, 200))
Что выглядит примерно так
+------+------+
| ID | Data |
+------+------+
| 2001 | 100 |
| 1001 | 300 |
| 2005 | 500 |
| 2001 | 900 |
| 5000 | 200 |
+------+------+
Предположим, первое, что я делаю, это вычисляю, сколько уникальных значений идентификатора находится в фрейме данных (это необходимо из-за размера рассматриваемого реального набора данных)
unique_ids <- sort(c(unique(people.dat$ID)))
Который дает
[1] 1001 2001 2005 5000
Где я застрял, так это в том, что я хотел бы добавить новый столбец, скажем, «new_id», который просматривает значение «ID» в кадре данных и оценивает его положение в unique_ids и присваивает позиционное значение (поэтому столбец «new_id» состоит значений в каждой строке в диапазоне от 1: длина (unique_ids)
Пример вывода будет следующим
+------+------+--------+
| ID | Data | new_id |
+------+------+--------+
| 2001 | 100 | 2 |
| 1001 | 300 | 1 |
| 2005 | 500 | 3 |
| 2001 | 900 | 1 |
| 5000 | 200 | 4 |
+------+------+--------+
Я думал об использовании цикла for с операторами if, но мои первые попытки не совсем увенчались успехом. Хотя, если бы я просто хотел заменить «ID» последовательным значением, следующий код работал бы (но я застрял в том, что хочу сохранить ID, но добавить еще один столбец «new_id»)
for (i in 1:48){
people.dat$ID[people.dat$ID == unique_ids[i]] <- i
}
Спасибо за любую помощь. Надеюсь, я максимально ясно изложил вопрос (хотя я изо всех сил пытался сформулировать некоторые из них, поэтому, пожалуйста, дайте мне знать, если есть что-то конкретное, что требует уточнения)