Подтвердить что ты не робот

Преобразование двух столбцов кадра данных в именованный вектор

Мне нужно преобразовать многострочный двух столбцов data.frame в именованный символьный вектор. Мой data.frame будет примерно таким:

dd = data.frame(crit = c("a","b","c","d"), 
                name = c("Alpha", "Beta", "Caesar", "Doris")
                )

и мне действительно нужно:

whatiwant = c("a" = "Alpha",
              "b" = "Beta",
              "c" = "Caesar",
              "d" = "Doris")
4b9b3361

Ответ 1

Используйте функцию names:

whatyouwant <- as.character(dd$name)
names(whatyouwant) <- dd$crit

as.character необходимо, потому что data.frame и read.table превращают символы в факторы с настройками по умолчанию.

Если вам нужен однострочный:

whatyouwant <- setNames(as.character(dd$name), dd$crit)

Ответ 2

Вы можете сделать вектор из dd$name и добавить имена, используя names(), но вы можете сделать все за один шаг с помощью structure():

whatiwant <- structure(as.character(dd$name), names = as.character(dd$crit))

Ответ 3

Для разнообразия попробуйте split и unlist:

unlist(split(as.character(dd$name), dd$crit))
#        a        b        c        d 
#  "Alpha"   "Beta" "Caesar"  "Doris" 

Ответ 4

Для этого вы также можете использовать deframe(x) из пакета tibble package.

tibble::deframe()

Преобразует первый столбец в имена, а второй столбец - в значения.