【问题标题】:Loop within Loop in RR中的循环内循环
【发布时间】:2022-11-11 19:34:21
【问题描述】:

我试图弄清楚如何在同一代码上运行两个不同的循环。我正在尝试创建一个矩阵,在其中我用每年的变量平均值填充一列。

这是我现在用来做的代码:

matplot2 = as.data.frame(matrix(NA, nrow=16, ncol=4))

matplot2[1,1] = mean(matplot[matplot$Year==2003, 'TotalTime'])
matplot2[2,1] = mean(matplot[matplot$Year==2004, 'TotalTime'])
matplot2[3,1] = mean(matplot[matplot$Year==2005, 'TotalTime'])
matplot2[4,1] = mean(matplot[matplot$Year==2006, 'TotalTime'])
matplot2[5,1] = mean(matplot[matplot$Year==2007, 'TotalTime'])
matplot2[6,1] = mean(matplot[matplot$Year==2008, 'TotalTime'])
matplot2[7,1] = mean(matplot[matplot$Year==2009, 'TotalTime'])
matplot2[8,1] = mean(matplot[matplot$Year==2010, 'TotalTime'])
matplot2[9,1] = mean(matplot[matplot$Year==2011, 'TotalTime'])
matplot2[10,1] = mean(matplot[matplot$Year==2012, 'TotalTime'])
matplot2[11,1] = mean(matplot[matplot$Year==2013, 'TotalTime'])
matplot2[12,1] = mean(matplot[matplot$Year==2014, 'TotalTime'])
matplot2[13,1] = mean(matplot[matplot$Year==2015, 'TotalTime'])
matplot2[14,1] = mean(matplot[matplot$Year==2016, 'TotalTime'])
matplot2[15,1] = mean(matplot[matplot$Year==2017, 'TotalTime'])
matplot2[16,1] = mean(matplot[matplot$Year==2018, 'TotalTime'])

如果只是年份变化,我会这样写循环:

for(i in 2003:2018) {
     matplot2[1,1] = mean(matplot[matplot$Year==i, 'TotalTime'])
}

但是,我需要将结果打印到的矩阵中的行号也进行更改。如何编写一个循环,将所有这些方法的结果打印到矩阵的一列中?

换句话说,除了matplot$Year==i 之外,我还需要让它循环matplot2[j,1]

任何建议将不胜感激!

【问题讨论】:

    标签: r loops matrix


    【解决方案1】:

    R 是一种矢量化语言,因此为索引和年份传递值的向量应该可以工作。

    i<-1:16
    matplot2[i,1] = mean(matplot[matplot$Year==(2002 + i), 'TotalTime'])
    

    【讨论】:

      【解决方案2】:

      您对 mean(TotalTime) 的文字计算都可以简化为单个命令(不需要 for 循环):

      matplot2 <- aggregate(TotalTime ~ Year, data = matplot, FUN = mean)
      

      这应该返回一个双列框架,第一列中具有 Year 的唯一值,第二列中具有相应的平均值。

      用我拥有的数据证明:

      head(mtcars)
      #                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
      # Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
      # Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
      # Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
      # Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
      # Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
      # Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
      res <- aggregate(disp ~ cyl, data = mtcars, FUN = mean)
      res
      #   cyl     disp
      # 1   4 105.1364
      # 2   6 183.3143
      # 3   8 353.1000
      

      这个和更多可以在summarize by group 中看到(这个问题本质上是一个骗局,即使你不知道这样问)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 2017-02-03
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多