cbind приводит кадр данных к матрице

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

После добавления столбца с помощью 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

2 ответа

Я думаю, вам не нужно 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

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

данные

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"]]) у вас будет тот же неадекватный результат, что и при использовании долларовой нотации.

Другие вопросы по тегам