динамически расширять столбцы фрейма данных с помощью cbind - PullRequest
13 голосов
/ 15 января 2012

Я хотел бы построить фрейм данных в цикле, добавляя новый столбец каждый раз, используя cbind.Я пытаюсь сделать следующее:

test <- NULL
df <- data.frame(x=c(1,2,3,4))
test <- cbind(test, df)

Это приводит к ошибке:

Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 0, 4

Как правильно создать экземпляр пустого фрейма данных в R и затем связать его с циклом?

Спасибо

Ответы [ 2 ]

17 голосов
/ 15 января 2012

Вам необходимо создать test как структуру с таким же количеством строк, чтобы cbind.data.frame не выдавала ошибку:

 test <-data.frame(row.names=1:4)
 df <- data.frame(x=c(1,2,3,4))
 test <- cbind(test, df)

 test
  x
1 1
2 2
3 3
4 4

Два других метода:

> test <-data.frame(row.names=1:4)
>      test[['x']] <-c(1,2,3,4)
> test
  x
1 1
2 2
3 3
4 4


> test <-data.frame(row.names=1:4)
>      test[1] <-list(x=c(1,2,3,4))
> test
  x
1 1
2 2
3 3
4 4
11 голосов
/ 15 января 2012

Как отметил Роман Луштрик, использование cbind может быть неэффективным.Вы можете начать с пустого списка и после цикла преобразовать его в data.frame.

test <- list()
# inner loop assigment
test <- c(test,list(c(1:4)))
# after loop
test <- as.data.frame(test)
...