【问题标题】:Create a data.frame with m columns and 2 rows创建一个具有 m 列和 2 行的 data.frame
【发布时间】:2011-08-31 12:26:44
【问题描述】:

我想在 R 中创建一个具有 m(变量)列数(例如 30)和 2 行的 data.frame,并最初用 0 填充 data.frame 中的所有值。似乎 data.frame 根据行而不是列填充值,有什么建议我可以这样做吗?谢谢:)

【问题讨论】:

    标签: r


    【解决方案1】:

    如果你想创建一个有一定行数的data.frame,并且你已经知道列名,你可以像这样定义make_df()函数:

    make_df <- function(nrow) {
      if (missing(nrow)) {
        nrow <- 0
      }
      
      temp_df <- data.frame(
        word = character(),
        meaning_grouping = integer(),
        part_of_speech = character(),
        phonetic = character(),
        audio = character(),
        origin = character(),
        definition = character(),
        examples = character(),
        synonyms = character(),
        antonyms = character(),
        stringsAsFactors = FALSE
      )
      
      if (nrow > 0) {
        temp_df[1:nrow,] <- NA
      }
      
      temp_df
    } 
    

    它允许您填充列名 列类(例如字符、整数、数字等)。

    创建一个5行的data.frame,例如:

    make_df(nrow=5)
      word meaning_grouping part_of_speech phonetic audio origin definition examples synomyms antonyms
    1 <NA>               NA           <NA>     <NA>  <NA>   <NA>       <NA>     <NA>     <NA>     <NA>
    2 <NA>               NA           <NA>     <NA>  <NA>   <NA>       <NA>     <NA>     <NA>     <NA>
    3 <NA>               NA           <NA>     <NA>  <NA>   <NA>       <NA>     <NA>     <NA>     <NA>
    4 <NA>               NA           <NA>     <NA>  <NA>   <NA>       <NA>     <NA>     <NA>     <NA>
    5 <NA>               NA           <NA>     <NA>  <NA>   <NA>       <NA>     <NA>     <NA>     <NA>
    

    或者创建一个 0 行的 data.frame:

    make_df()
     [1] word             meaning_grouping part_of_speech   phonetic         audio            origin           definition       examples        
     [9] synomyms         antonyms        
    <0 rows> (or 0-length row.names)
    

    【讨论】:

      【解决方案2】:

      为了完整性:

      按照 Chase 的回答,我通常使用 as.data.frame 将矩阵强制转换为 data.frame:

      m &lt;- as.data.frame(matrix(0, ncol = 30, nrow = 2))

      编辑:speed test data.frameas.data.frame

      system.time(replicate(10000, data.frame(matrix(0, ncol = 30, nrow = 2))))
         user  system elapsed 
        8.005   0.108   8.165 
      
      system.time(replicate(10000, as.data.frame(matrix(0, ncol = 30, nrow = 2))))
         user  system elapsed 
        3.759   0.048   3.802 
      

      是的,它似乎更快(大约 2 倍)。

      【讨论】:

      • 您的回答有何不同?它更快吗?
      • @Eduardo 它似乎要快一点 - 见上文。
      【解决方案3】:

      m 真的需要成为 data.frame() 还是 matrix() 就足够了?

      m <- matrix(0, ncol = 30, nrow = 2)
      

      如果需要,您可以在其周围加上 data.frame()

      m <- data.frame(m)
      

      或全部在一行中:m &lt;- data.frame(matrix(0, ncol = 30, nrow = 2))

      【讨论】:

      • 这正是要写的。 +1 ;) 我唯一的补充是明确指出 data.frame() 通常通过其 tag=value 参数按列指定数据。
      猜你喜欢
      • 2023-02-10
      • 1970-01-01
      • 2018-07-13
      • 2017-11-11
      • 2012-03-21
      • 2015-03-11
      相关资源
      最近更新 更多