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