Если у вас есть data.frame
сказать, "DF", как это:
DF <- data.frame(x=1:9, y=letters[1:9])
И у Вас есть vector
г:
z <- c(0, 1, 0, 0, 0, 0, 0, 0, 0)
Примечание, что число строк в вашем data.frame
и длина vector
должна быть одинаковой, если вы хотите добавить vector
в data.frame
в качестве новой колонки.
dim(DF) # dimensions of data.frame
# [1] 9 2
length(z) # length of vector
# [1] 9
Теперь вы можете использовать cbind
, чтобы получить новую колонку:
cbind(DF, z)
# x y z
# 1 1 a 0
# 2 2 b 1
# 3 3 c 0
# 4 4 d 0
# 5 5 e 0
# 6 6 f 0
# 7 7 g 0
# 8 8 h 0
# 9 9 i 0
Если у вас есть vector
, длина которого не равен из data.frame
строк, а затем,
z <- c(0, 1, 0, 0, 0, 0, 0) # length is 7
cbind(DF, z)
# Error in data.frame(..., check.names = FALSE) :
# arguments imply differing number of rows: 9, 7
cbind
«ИНГ приводит к ошибке из-за разной длины s. В этом случае я мог бы подумать о двух способах сохранить это как list
.
Во-первых, вы можете держать data.frame
DF как таковой, и создать list
с первым элементом, как data.frame
, а второй как vector
следующим образом:
my_l <- list(d1 = DF, d2 = z)
# $d1
# x y
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
# 6 6 f
# 7 7 g
# 8 8 h
# 9 9 i
#
# $d2
# [1] 0 1 0 0 0 0 0
В качестве альтернативы, вы можете конвертировать ваши data.frame
к list
(а data.frame
внутренне в list
) и создать list
, элементами которого являются все vectors
следующим образом:
my_l <- c(as.list(DF), list(z=z))
# $x
# [1] 1 2 3 4 5 6 7 8 9
#
# $y
# [1] a b c d e f g h i
# Levels: a b c d e f g h i
#
# $z
# [1] 0 1 0 0 0 0 0
Обратите внимание, что as.list
приводит в порядок data.frame
столбцов к list
с именами названий столбцов data.frame
. Затем мы создаем новый list
z, а затем concatenate
с использованием оператора c
.
Надеюсь, что это немного улучшит ваше понимание.
Я предполагаю, что вы ищете 'cbind', но я могу более конкретно, без [воспроизводимого примера] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5964905) того, что у вас есть. –
Я думаю, что это может быть вектор, а не строка. Я бы посоветовал пройти один из многочисленных онлайн-уроков или подобрать книгу. – N8TRO
Синий Магистр и Натан правы. Если вы хотите только транспонировать векторы, вы можете использовать функцию 't' – JT85