【问题标题】:List Columns - Creating a data frame of data frames列出列 - 创建数据框的数据框
【发布时间】:2017-10-24 15:00:43
【问题描述】:

我想创建一个非常简单的数据框数据框。我希望主数据框有 100 行,两列。一列称为“行”,编号为 1-100,另外两列称为“df1”和“df2”,它们各自是一个数据框,其中有一列“行”,编号为 1-100。我尝试了以下方法:

mydf <- data.frame(row=1:100)
for(i in 1:100){
  mydf$df1[i] <- data.frame(row=1:100)
  mydf$df2[i] <- data.frame(row=1:100)
}

但这会创建列表而不是数据框,并且列未命名。我也试过了:

mydf <- data.frame(row=1:100)
mydf <- mydf %>% mutate(df1=data.frame(row=1:100),df2=data.frame(row=1:100))

但这会引发错误。看起来我正在做的事情应该不会太难,我做错了什么,我该如何做到这一点?

谢谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    在每行基础上使用do,而不是mutate

    mydf <- data.frame( row = 1:100 ) %>% group_by(row) %>%
      do( df1 = data.frame(row=1:100), df2 = data.frame(row=1:100) ) %>% ungroup
    # # A tibble: 100 x 3
    #     row                    df1                    df2
    #   <int>                 <list>                 <list>
    # 1     1 <data.frame [100 x 1]> <data.frame [100 x 1]>
    # 2     2 <data.frame [100 x 1]> <data.frame [100 x 1]>
    # 3     3 <data.frame [100 x 1]> <data.frame [100 x 1]>
    # ...
    

    【讨论】:

      【解决方案2】:

      您可以使用replicate 来实现,即

      mydf$df1 <- replicate(100, mydf)
      mydf$df2 <- replicate(nrow(mydf), mydf) #I used nrow here to make it more generic
      

      【讨论】:

        【解决方案3】:

        我认为您应该使用嵌套数据框,如 https://www.rdocumentation.org/packages/tidyr/versions/0.6.1/topics/nest 但是对于你所要求的,你需要运算符 I。

        mydf <- data.frame(row=1:100)
        for(i in 1:100){
          mydf$df1[i] <- I(data.frame(row=1:100))
          mydf$df2[i] <- I(data.frame(row=1:100))
        }
        show(mydf)
        mydf$df1
        

        【讨论】:

        • I 运算符是做什么的?我正在尝试搜索文档,但不幸的是,带有“我”这个词的页面很常见。
        • Hadley Wickham 在 Advanced R 中描述了它:adv-r.had.co.nz/Data-structures.html 它代表 AsIs。因为一个数据框是一个列表,所以当您附加其他数据框时,它只是将更多元素附加到列表(列)中,但是对于操作符 I,这不会发生。
        猜你喜欢
        • 1970-01-01
        • 2015-04-21
        • 2016-04-24
        • 2021-11-11
        • 2020-09-19
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多