Динамически расширять столбцы фрейма данных, используя cbind
Я хотел бы создать кадр данных в цикле, каждый раз добавляя новый столбец, используя 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 и затем привязки к нему в цикле?
Спасибо
Ответы
Ответ 1
Вам нужно создать 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
Ответ 2
Как отметил Роман Луштрик, для использования cbind может быть неэффективно. Вы можете начать с пустого списка и после цикла преобразовать его в data.frame.
test <- list()
# inner loop assigment
test <- c(test,list(c(1:4)))
# after loop
test <- as.data.frame(test)