Извлечь столбец из data.frame как вектор

Я новичок в R.

У меня есть Data.frame со столбцом под названием «Символ».

   Symbol
1   "IDEA"
2   "PFC"
3   "RPL"
4   "SOBHA"

Мне нужно сохранить его значения в виде вектора (x = c("IDEA","PFC","RPL","SOBHA")). Какой способ сделать это наиболее кратко?


person st0le    schedule 13.10.2010    source источник


Ответы (2)


your.data <- data.frame(Symbol = c("IDEA","PFC","RPL","SOBHA"))
new.variable <- as.vector(your.data$Symbol) # this will create a character vector

ВитошКа предложил использовать следующий код.

new.variable.v <- your.data$Symbol # this will retain the factor nature of the vector

То, что вы хотите, зависит от того, что вам нужно. Если вы используете этот вектор для дальнейшего анализа или построения графиков, сохранение факторной природы вектора является разумным решением.

Чем отличаются эти два метода:

cat(new.variable.v)
#1 2 3 4

cat(new.variable)
#IDEA PFC RPL SOBHA
person Roman Luštrik    schedule 13.10.2010
comment
Спасибо VitoshKa за предложение. - person Roman Luštrik; 13.10.2010
comment
Что, если имя столбца хранится в переменной? - person Nick; 18.05.2014
comment
Понятно - вы можете получить доступ к столбцу с помощью переменной через: your.data [, varName] - person Nick; 18.05.2014
comment
мне кажется, это не работает; class (x) и typeof (x) оба возвращают 'character' после вызова x ‹-as.vector (df $ col). что мне не хватает? - person 3pitt; 26.09.2017
comment
@MikePalmice можешь привести небольшой пример? - person Roman Luštrik; 27.09.2017
comment
@ RomanLuštrik Я имею в виду, что я не могу многое уточнить. это добросовестный фрейм данных, один из столбцов содержит строки, и, как я уже сказал, class (x) и typeof (x) оба возвращают «символ» после вызова x ‹-as.vector (df $ col). действительно ли вектор будет обладать этими свойствами? кстати спасибо за ответ - person 3pitt; 27.09.2017

Роман Луштрик дал отличный ответ, однако обозначение $ часто оказывается трудным для использования в трубке. В канале используйте dplyr функцию pull().

# setting up
library(tidyverse)
# import tidyverse for dplyr, tibble, and pipe
   
df <- data.frame(Symbol = c("IDEA","PFC","RPL","SOBHA"))
> df
  Symbol
1   IDEA
2    PFC
3    RPL
4  SOBHA

Теперь, когда фрейм данных настроен, мы сначала сделаем несколько случайных изменений фрейма данных, чтобы показать, что он будет работать в конвейере, и в конце мы будем использовать pull().

myvector <- df %>%
  mutate(example_column_1 = 1:4, example_column_2 = example_column_1^2) %>% #random example function
  arrange(example_column_1) %>% #random example function
  pull(Symbol) # finally, the pull() function; make sure to give just the column name as an argument

Вы даже можете дополнительно манипулировать вектором в конвейере после функции pull().

> myvector
[1] IDEA  PFC   RPL   SOBHA
Levels: IDEA PFC RPL SOBHA
> typeof(myvector)
[1] "integer"

typeof(myvector) возвращает целое число, потому что так хранятся факторы, где различные уровни фактора хранятся как целые числа (я думаю, что они хранятся именно так, по крайней мере). Если вы хотите преобразовать в вектор символов, просто используйте as.character(myvector).

В заключение, используйте функцию dplyr pull() (и введите только имя столбца, который вы хотите извлечь), когда вы хотите извлечь вектор из фрейма данных или таблицы в канале.

person Phillip Long    schedule 05.12.2020