【问题标题】:Multiple Matrix Operations in R with loop based on matrix nameR中的多个矩阵运算,基于矩阵名称的循环
【发布时间】:2014-04-05 23:08:18
【问题描述】:

我是一名 R 新手,正在学习使用这种编码语言来处理研究中的数据问题。我试图通过查看子类中的专利来了解知识如何在行业内发展。到目前为止,我设法得到以下内容:

# kn.matrices<-with(patents, table(Class,year,firm))
# kn.ind <- with(patents, table(Class, year))

patents 是我的数据文件,Subclass、app.yr 和 short.name 是 14 列中的三列

# for (k in 1:37)  
# kn.firms = assign(paste("firm", k ,sep=''),kn.matrices[,,k]) 

有 37 家不同的公司(在真实数据集中,这里只有 5 家)

这给出了 37 个特定于公司和 1 个特定于行业的 2635 x 29 个矩阵(在真实数据集中)。所有特定于公司的矩阵都称为firmk,k 从 1 到 37。

我想在每个特定于公司的矩阵中执行许多操作(例如,将 app.yr 't' 中的数字与所有行中前 3 年的平均值进行比较),所以我正在寻找一种方法允许我循环每个名为firm1,firm2,firm3...,firm37 的矩阵的操作,并生成具有一致命名的新矩阵,例如坚定1.3年比较

希望我以适当的方式提出了这个问题。任何帮助将不胜感激。

在 cmets 之后,我正在尝试添加一个最小的可重现示例

公司

因此,这三个向量表示电子表格中的列,形成了前面提到的“专利”矩阵。

【问题讨论】:

  • 您不应将其分配给 37 个矩阵,而应在 kn.matrices 上使用 apply
  • 嗨 Roland,您能否更具体地说明我应该如何使用 apply,这将如何解决我的问题,以及如果我将所有 37 个公司特定矩阵存储在一个非常长的矩阵中 (97125 x 29),我怎么还能知道公司 1 的结束位置和公司 2 的开始位置?
  • 在您生成reproducible example 之前,我无法更具体。然而,正如我所说,要么直接在table 数据结构上使用apply,要么在as.data.frame(kn.matrices) 上使用aggregateddply 或其他拆分应用组合函数。用许多对象污染全局工作空间通常是不必要的,也是不好的做法。
  • 公司年级FW.CIT A 1989 7900 18 A 1990 18000 9 B 1991 212000 18 B 1991 253600 7 C 1991 7710 4 C 1991 7710 4 C 1991 212000 319193 21919193 215000 10 D 1989 286000 7 E 1989 19000 6 E 1990 653000 26 D990 210190 2 V 1992 21703019 A 1991 249000 19 A 1992 232800 5 A 1990 594000 3 A 1990 36000 6 B 1990 36000 392 36000 392 36000 61 1992 36000 61 1992 7900 63 c 1991 18000 5 c 1993 212000 0 d 1989 253600 1 e 1989 7710 53 e 1990 7900 44 d 1992 18000 10 b 1991 212000 26 c 1990 2536000
  • 如果您想提供更多信息,请编辑您的问题。

标签: r for-loop matrix while-loop


【解决方案1】:

看起来您已经有了一个包含所有数据的 3 维数组。您基本上可以将其视为您的 38 个矩阵都堆叠在一起。您不想将其拆分为 38 个矩阵并使用循环。相反,您可以使用 R 的应用函数和提取函数。只需查看 apply() 系列的帮助主题,它就会向您展示如何做您想做的事情。以下是一些基本示例

例子:

# returns the sums of all columns for all matrices
apply(kn.matrices, 3, colSums)

# extract the 5th row of all matrices
kn.matrices[5, , ]

# extract the 5th column of all matrices
kn.matrices[, 5, ]

# extract the 5th matrix
kn.matrices[, , 5]

# mean of 5th column for all matrices
colMeans(kn.matrices[, 5, ])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多