2015-05-01 4 views
0

У меня возникают проблемы При использовании cbind. До использования cbind объектом является data.frame двух векторов символов.cbind заставляет привязку данных к матрице

После добавления столбца с использованием cbind объект data.frame меняет класс на матрицу. Я пробовал as.vector, объявляя h как пустой вектор символов и т. Д., Но не смог его исправить. Благодарим вас за любые предложения и помощь.

output <- data.frame(h = character(), st = character()) ## empty dataframe 
st <- state.abb 
h <- (rep("a", 50)) 
output <- cbind(output$h, h) ## output changes to matrix class here 
output <- cbind(output, st) ## adding a second column 
+1

'? Cbind' говорит * Метод фрейма данных будет использоваться, если хотя бы один аргумент является фреймом данных, а остальные - векторами или матрицами *. Вы передаете два вектора в 'cbind', поэтому результат не является dataframe – user20650

+0

Спасибо. Вот почему я сначала создал пустой файл data.frame, думая, что сохранит его в кадре данных, пока я продолжаю добавлять к нему другие столбцы. – Ken

+0

'output' - это кадр данных. 'output $ h' - это _not_ кадр данных. Следовательно, 'cbind (output $ h, h)' не вызывает любую магию, связанную с кадром данных. –

ответ

0

Я думаю, вам не нужно cbind().

output <- data.frame(state = state.abb, h = rep("a", 50)) 
head(output) 
state h 
1 AL a 
2 AK a 
3 AZ a 
4 AR a 
5 CA a 
6 CO a 

@ Кен Я не уверен, что вы на самом деле хотите получить, но это может быть проще, если переменные сохраняются в списке. Ниже приведен пример.

state <- state.abb 
h <- rep("a", 50) 

lst <- list(state = state, h = h) 
mat <- as.matrix(do.call(cbind, lst)) 
head(mat) 
state h 
[1,] "AL" "a" 
[2,] "AK" "a" 
[3,] "AZ" "a" 
[4,] "AR" "a" 
[5,] "CA" "a" 
[6,] "CO" "a" 

df <- as.data.frame(do.call(cbind, lst)) 
head(df) 
state h 
1 AL a 
2 AK a 
3 AZ a 
4 AR a 
5 CA a 
6 CO a 
+0

Спасибо ... хотя я планирую добавить больше столбцов. Что делает преобразование в матрицу проблемой. – Ken

+0

Который бы вы хотели получить: кадр данных или матрица? –

+0

Я бы хотел получить data.frame после всех cbinds. Думаю, мне нужно преобразовать из матрицы в data.frame после завершения cbinds? Благодаря! – Ken

0

В дополнение информации, обратите внимание, что вы можете использовать единый кронштейн обозначения, чтобы заставить его работать с чем-то близко к исходному коду: данные

output <- data.frame(h = letters[1:5],st = letters[6:10]) 
h2 <- (rep("a", 5)) 

Это вонн не включенных в другие категории

cbind(output$h, h2) 
#   h2 
# [1,] "1" "a" 
# [2,] "2" "a" 
# [3,] "3" "a" 
# [4,] "4" "a" 
# [5,] "5" "a" 
class(cbind(output$h, h2)) # matrix 

Это матрица и факторы были принуждены в цифрах

это будет работать

cbind(output["h"], h2) 
# h h2 
# 1 a a 
# 2 b a 
# 3 c a 
# 4 d a 
# 5 e a 
class(cbind(output["h"], h2)) # data.frame 

Обратите внимание, что двойные скобки (output[["h"]]) вы будете иметь тот же неадекватный результат, как при использовании доллара обозначения ,

Смежные вопросы