Преобразование имен в идентификационные коды в разных столбцах в R - PullRequest
0 голосов
/ 28 апреля 2020

Я новичок в R и борюсь со следующей проблемой:

У меня есть набор данных, более или менее похожий на этот:

NAME                     Collegue1                  Collegue 2
John Smith               Bill Gates                 Brad Pitt
Adam Sandler             Bill Gates                 John Smith
Bill Gates               Brad Pitt                  Adam Sandler
Brad Pitt                John Smith                 Bill Gates

Мне нужно создать идентификационный код и заменить имена с соответствующим идентификатором в трех столбцах, как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Может быть, вы можете попробовать код, как показано ниже

df[]<-as.integer(factor(unlist(df),levels = df$NAME))

, например

> df
  NAME Collegue1 Collegue2
1    1         3         4
2    2         3         1
3    3         4         2
4    4         1         3

или

df[-1] <- as.integer(factor(unlist(df[-1]),levels = df$NAME))

, например

> df
          NAME Collegue1 Collegue2
1   John Smith         3         4
2 Adam Sandler         3         1
3   Bill Gates         4         2
4    Brad Pitt         1         3

Данные

df <- structure(list(NAME = c("John Smith", "Adam Sandler", "Bill Gates", 
"Brad Pitt"), Collegue1 = c("Bill Gates", "Bill Gates", "Brad Pitt", 
"John Smith"), Collegue2 = c("Brad Pitt", "John Smith", "Adam Sandler", 
"Bill Gates")), class = "data.frame", row.names = c(NA, -4L))
2 голосов
/ 28 апреля 2020

Вы можете преобразовать имена в factor и использовать unclass для получения идентификационных кодов.

x[-1] <- unclass(factor(unlist(x[-1]), x$NAME))
cbind(x["NAME"], ID=seq_along(x$NAME), x[-1])
#          NAME ID Collegue1 Collegue.2
#1   John Smith  1         3          4
#2 Adam Sandler  2         3          1
#3   Bill Gates  3         4          2
#4    Brad Pitt  4         1          3

На случай, если вас просто интересуют идентификаторы:

levels(factor(unlist(x))) #Only in case you are interested in the codes of the table
#[1] "Adam Sandler" "Bill Gates"   "Brad Pitt"    "John Smith"
x[] <- unclass(factor(unlist(x)))
x
#  NAME Collegue1 Collegue.2
#1    4         2          3
#2    1         2          4
#3    2         3          1
#4    3         4          2

Данные:

x <- structure(list(NAME = c("John Smith", "Adam Sandler", "Bill Gates", 
"Brad Pitt"), Collegue1 = c("Bill Gates", "Bill Gates", "Brad Pitt", 
"John Smith"), Collegue.2 = c("Brad Pitt", "John Smith", "Adam Sandler", 
"Bill Gates")), class = "data.frame", row.names = c(NA, -4L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...