使用cbind动态扩展数据框列

Ale*_*lex 13 null binding r dataframe

我想在循环中构建一个数据框,每次使用时添加一个新列cbind.我尝试以下方法:

test <- NULL
df <- data.frame(x=c(1,2,3,4))
test <- cbind(test, df)
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

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

在R中实例化空白数据帧然后在循环中绑定它的正确方法是什么?

谢谢

42-*_*42- 17

您需要创建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
Run Code Online (Sandbox Code Playgroud)

另外两种方法:

> 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
Run Code Online (Sandbox Code Playgroud)


Woj*_*ala 11

正如RomanLuštrik所指出的,使用cbind可能效率低下.您可以从空列表开始,然后循环将其转换为data.frame.

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