【问题标题】:adding elements with same name in a matrix在矩阵中添加具有相同名称的元素
【发布时间】:2014-10-09 12:25:21
【问题描述】:

我有两个矩阵

Mdates<-c("8Q1","8Q2","8Q3","8Q4","9Q1","9Q2","9Q3","9Q4","10Q1","10Q2","10Q3","10Q4","11Q1","11Q2","11Q3","11Q4","12Q1","12Q2","12Q3","12Q4","13Q1","13Q2","13Q3","14Q1","14Q2")
Cr<-matrix(c("14Q2","13Q2","14Q2","14Q1","13Q4","13Q4","12Q4","13Q3","13Q4","12Q3","14Q2",12867.8,12710.7,10746.9,9634.4,8238.5,7835.2,7315.6,7263.1,7002.7,6104.8,5759.3),ncol=2,byrow=FALSE)

我在 Cr 中添加了所有具有相同名称的东西,并将其放在 Mdates 中的相同列名下,所以理想情况下它看起来像这样:

8Q1 8Q2 8Q3 8Q4 9Q1 9Q2 9Q3 9Q4 10Q1 10Q2 10Q3 10Q4 11Q1 11Q2 11Q3 11Q4 12Q1 12Q2  12Q3    12Q4   13Q1  13Q2    13Q3   13Q4    14Q1   14Q2
 0   0   0   0   0   0   0   0   0    0    0    0    0    0    0    0    0    0   6104.8  7315.6  0    12710.7 7263.1 15241.3 9634.4 29373.9

【问题讨论】:

    标签: r matrix sum


    【解决方案1】:

    你可以试试:

     res <- tapply(as.numeric(Cr[,2]), factor(Cr[,1], levels=unique(Mdates)), FUN=sum)
     res[is.na(res)] <- 0
    
      res
      # 8Q1   8Q2   8Q3   8Q4   9Q1   9Q2   9Q3   9Q4  10Q1  10Q2  10Q3  10Q4  11Q1 
      # 0     0     0     0     0     0     0     0     0     0     0     0     0 
      #11Q2  11Q3  11Q4  12Q1  12Q2  12Q3  12Q4  13Q1  13Q2  13Q3  14Q1  14Q2 
      #  0     0     0     0     0  6105  7316     0 12711  7263  9634 29374 
    

    【讨论】:

      【解决方案2】:

      我认为以下内容可以做到。 首先,它选择在 Mdates 中找到的 Cr 中的元素:

      A<-Cr[ ,1]
      B<-which(A %in% Mdates)
      Crnew<-Cr[B, ]
      

      以下步骤提供每个类别的总和值:

      fac <- as.factor(Crnew[ ,1])
      num <- as.numeric(Crnew[ ,2])
      x <-data.frame(fac, num)
      tapply(x$num, x$fac, FUN=sum)
      

      【讨论】:

      • 非常感谢,这也很有帮助:D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      相关资源
      最近更新 更多