【问题标题】:Creating/Populating Empty Data Frames in R在 R 中创建/填充空数据框
【发布时间】:2021-01-10 20:38:11
【问题描述】:

我正在使用 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

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

谢谢

【问题讨论】:

    标签: r dataframe data-manipulation populate


    【解决方案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列是vectorvectorlength应该与我们指定的索引相同。假设,我们要扩展为 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, 100))
    

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

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

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

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

    【讨论】:

    • 但是为什么这是必要的?我也试过这个: df[1, "total"] [<-.data.frame(*tmp*, 1, "total", value = c(-79.4584309347689, : 替换有 100 行数据有 1 ... 你知道为什么会这样吗?谢谢
    • @Noob 您在一行中添加了 100 个元素。它可以是一个列表,即list(rnorm(100, 100, 100))。请注意,标准 data.frame 列是vector,它假定向量与行索引的长度相同。如果需要添加 100 行,请使用df[1:100, "total"] &lt;- rnorm(100, 100, 100)
    • 感谢您的所有帮助。最后一个问题:假设我已经存在另一个数据框(称为“aa”,列“bb”)。这行得通吗? df[1, "total"]
    • @Noob 取决于你可能需要的长度 'bb' df[seq_along(aa$bb), "total"] &lt;- aa$bb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多