【发布时间】: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)上使用aggregate、ddply或其他拆分应用组合函数。用许多对象污染全局工作空间通常是不必要的,也是不好的做法。 -
公司年级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