Преобразование двух столбцов кадра данных в именованный вектор
Мне нужно преобразовать многострочный двух столбцов 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")
Ответы
Ответ 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()
Преобразует первый столбец в имена, а второй столбец - в значения.