【问题标题】:How to create a data.frame with a unknown number of columns?如何创建具有未知列数的data.frame?
【发布时间】:2010-04-01 12:53:59
【问题描述】:

我想在函数中创建一个循环来创建具有可变列数的 data.frame。

类似的东西:

a = c("a","b")
b = c(list(1,2,3), list(4,5,6))
data.frame(a,b)

我想得到一个像这样的数据框:

a 1 2 3
b 4 5 6

而不是我得到:

a  1  2  3  4  5  6
b  1  2  3  4  5  6

谢谢!

PS : 我也试过用 rbind,但是不行...

【问题讨论】:

  • a 代表列名还是行名?

标签: r dataframe


【解决方案1】:

有很多方法可以做这种事情。您的第一个问题是您的“b”对象不是矩阵。您需要将其定义为具有行和列(或使用 rbind)。

您可以创建数据框,然后将它们组合起来(这比一开始就使用矩阵要好,因为它会将每个对象类型保持为数字或字符等,而矩阵会丢失它):

x1 <- data.frame(X=c("a","b"))
x2 <- data.frame(rbind(c(1,2,3), c(4,5,6)))
data.frame(x1, x2)
  X X1 X2 X3
1  a  1  2  3
2  b  4  5  6

如果 x1 用于行名,那么您应该遵循 James 的示例:

x2 <- data.frame(rbind(c(1,2,3), c(4,5,6)))
rownames(x2) <- c("a","b")

【讨论】:

    【解决方案2】:

    您是否将 b 中的 2 个列表作为单独的变量保存?

    如果是这样,您可以使用:

    x<-data.frame(rbind(b1,b2))
    rownames(x)<-a
    

    【讨论】:

      【解决方案3】:

      另一种方式

      a = c("a","b")
      b = list(c(1,2,3), c(4,5,6))
      
      library(plyr)
      df <- ldply(b)
      rownames(df) <- a
      

      【讨论】:

        【解决方案4】:

        非常感谢! 在阅读您的回复之前,我尝试了另一种方法:

        for (x in niveaux) {
            assign(x,pi)
            assign(paste(x,"moy"),"moy")
            }
        # Que j'utilise ensuite avec qq chose du genre :
        assign(x,append(get(x),1))
        

        但它更复杂!

        奥利维尔

        PS : 'a' 可以是行名或列,目的是将 data.frame 导出为 CSV 文件。

        【讨论】:

          猜你喜欢
          • 2017-11-11
          • 2015-03-11
          • 1970-01-01
          • 2018-11-18
          • 2013-08-10
          • 1970-01-01
          • 1970-01-01
          • 2017-10-27
          • 2018-04-16
          相关资源
          最近更新 更多