【问题标题】:Iterative Function results into Matrix or Data Frame on R迭代函数导致 R 上的矩阵或数据帧
【发布时间】:2018-03-27 12:34:05
【问题描述】:

我的迭代函数的输出打印正常,但如何将其保存为数据框/矩阵对象?

     for(i in id){
            print(data.frame("ID" = i, "nobs" = length(data4[data4 == i])))
    }


     ID nobs
   1  1  117
      ID nobs
    1  2 1041
      ID nobs
    1  3  243
      ID nobs
    1  4  474
     ID nobs
   1  5  402
     ID nobs
   1  6  228
     ID nobs
   1  7  442
     ID nobs
    1  8  192

我已经尝试预先创建一个矩阵,但是如果我尝试将它分配给矩阵,我会得到一个 NULL 值。

    mat.obs <- matrix(NA, nrow = 332, ncol = 2)
    for(i in id){
            print(data.frame("ID" = i, "nobs" = length(data4[data4 == i])))
            mat.obs <- data.frame("ID" = i, "nobs" = length(data4[data4 == i]))
          }
      }

【问题讨论】:

  • data4 是向量??
  • 你必须将输出分配给'mat.obj`中的行mat.obs[i, ] &lt;- c("ID" = i, "nobs" = length(data4[data4 == i]))
  • 你不能用table(data4)作为开始吗?我建议不要使用matrix,因为一列的单位 与其他列不同;虽然它会以编程方式工作,但它有点草率。在不假设列具有相同单位的情况下,data.frame 会更合适。 (这似乎有点迂腐,但将 matrix 视为单一类型的东西是“一件好事(tm)”。)
  • 谢谢大家。总是在这里学习新东西!

标签: r matrix iteration rstudio


【解决方案1】:

你可以像这样使用data.table

library(data.table)
# create a data.table with data4 as a column named 'id'
DT = data.table(id = data4)

# count observations with each ID
DT[ , .N, by = id]

【讨论】:

    【解决方案2】:

    试试这个:

    library(plyr)
    ldply(id, function(i) data.frame("ID" = i, "nobs" = length(data4[data4 == i])))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-14
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多