2012-10-09 3 views
1

у меня есть кадр данных, как это:свернуть data.frame в вектор

COL1 COL2 COL3

a   h 
b f  
c g   
d   j 

Я хотел бы следующий вывод:

COL
a
b
с
д
е
г
ч
J

Как это можно сделать? Спасибо заранее!

ответ

6

Если ваш data.frame назван dat, попробуйте:

unlist(dat, use.names=FALSE) 

Вы также можете попробовать следующее:

as.character(unlist(dat, use.names=FALSE)) 
c(na.omit(as.character(unlist(dat, use.names=FALSE)))) 

, которые могут быть полезны, если ваши данные вводятся в качестве факторов.

Кроме того, в вашем вопросе вы указываете, что на самом деле у вас нет базового «вектора», а скорее одного столбца data.frame. Таким образом, что-то вроде dat2 <- data.frame(COL = c(na.omit(as.character(unlist(dat, use.names=FALSE))))) может быть тем, что вы ищете.

4
do.call(c, your_data_frame) 

Пример:

> dat <- data.frame(a = 1:3, b = 2:4) 
> do.call(c, dat) 
a1 a2 a3 b1 b2 b3 
1 2 3 2 3 4 

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

+3

Или 'unlist (Дат)'. –

+0

Привет, Дэсон. Спасибо в первую очередь. Я пробовал, но возникает следующая ошибка: Ошибка в do.call (c, dat): «что» должно быть символьной строкой или функцией – Bnf8

+0

@ Bnf8, похоже, что вы использовали 'c' в качестве имени переменной где-то , Попробуйте 'do.call (base :: c, your_data_frame)'. –

3

Вы можете использовать unlist:

dat <- data.frame(A1 = letters[1:3], 
        A2 = letters[2:4], 
        A3 = c("f", "a", "b"), stringsAsFactors = FALSE) 

unlist(dat) 

# A11 A12 A13 A21 A22 A23 A31 A32 A33 
# "a" "b" "c" "b" "c" "d" "f" "a" "b" 
Смежные вопросы