在 R 中创建/填充空数据帧

问题描述

我正在使用 R。我在这里找到了有关在 R 中创建空数据框的链接:Create an empty data.frame

我尝试做类似的事情:

df <- data.frame(Date=as.Date(character()),country=factor(),total=numeric(),stringsAsFactors=FALSE) 

然而,当我尝试填充它时:

df$total = 7

我收到以下错误:

Error in `$<-.data.frame`(`*tmp*`,total,value = 7) : 
  replacement has 1 row,data has 0

df[1,"total"] <- rnorm(100,100,100)

Error in `[<-.data.frame`(`*tmp*`,1,"total",value = c(-79.4584309347689,: 
  replacement has 100 rows,data has 1

有人知道如何解决这个错误吗?

谢谢

解决方法

一个选项是指定行索引

df[1,"total"] <- 7

-输出

str(df)
#'data.frame':  1 obs. of  3 variables:
# $ Date   : Date,format: NA
# $ country: Factor w/ 0 levels: NA
# $ total  : num 7

问题在于,当我们选择单个列并在 0 行数据集上分配时,它不会自动扩展其他列的行。通过指定行索引,其他列将自动填充默认NA

关于第二个问题(更新),一个标准的 data.frame 列是一个 vector 并且 lengthvector 应该与我们指定的索引相同。假设,我们要扩展到 100 行,相应地更改索引

df[1:100,"total"] <- rnorm(100,100,100) # length is 100 here
dim(df)
#[1] 100   3

或者,如果我们需要将所有内容都塞进一行,然后将 rnorm 包裹在 list

df[1,"total"] <- list(rnorm(100,100))

简而言之,lhs 的长度应该与 rhs 的长度相同。另一种情况是当我们从不同的数据集进行分配时

df[seq_along(aa$bb),"total"] <- aa$bb 

这也可以在没有初始化的情况下完成,即

df <- data.frame(total = aa$bb)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...