【发布时间】:2021-05-11 14:41:33
【问题描述】:
我是 Stack 社区和 R 的新手。我试图在一年的一堆代码之后获得三个特定值,即 2000 年。所以,我得到一行三列。但是,我需要将这些特定值作为输出再持续 14 年,直到 2014 年。我怎样才能以一种不凌乱的方式循环,需要一些建议。我正在尝试以下代码:
CVA <-data.frame()
for(i in 2000:2014) {
D.2000 <- filter(Deu.niot.new, ...1==i)
D.dom.2000 <-filter(Deu.2000,...4=="Domestic")
D.imp.2000 <-filter(Deu.2000,...4=="Imports")
D.ndom.2000 <-select(Deu.2000.dom,-(...61:...67))
D.nimp.2000 <-select(Deu.2000.imp,-(...61:...67))
等等....(更多代码)
那么,我需要以下一个作为我的最终结果:
CVA [[i,]]<-cbind(cva.agri.2000,cva.manu.2000,cva.ser.2000)
这意味着我需要使用 for 循环再创建 14 行 3 列。使用上面的一堆代码,我刚刚得到了 2000 的值。我需要输出为 data.frame。
任何提示或建议都会有所帮助!
我用 dput 来展示我的数据结构,不过看起来真的很乱:
结构(列表(...1 = c(2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000), ...2 = c("A01", "A02", "A03", "B", "C10-C12", "C13-C15", "C16", "C17", "C18", "C19"), ...3 = c("作物和动物生产、狩猎和相关服务活动", “林业和伐木”,“渔业和水产养殖”,“采矿和采石”, “食品、饮料和烟草制品的制造”, “纺织品、服装和皮革制品的制造”, “木材以及木材和软木制品的制造,家具除外;稻草和编织材料制品的制造”, “纸和纸制品的制造”,“记录媒体的印刷和复制”, "焦炭和精炼石油产品的制造"), ...4 = c("国内", “国内”、“国内”、“国内”、“国内”、“国内”、“国内”、 "国内", "国内", "国内"), ...5 = c(1180.79357309081, 38.9191594938878, 0.0105591974138373, 20.3813413720862, 2717.28244274957, 26.4883571262503, 47.5892951388691, 22.4047547307701, 31.3319695906172, 444.595589525748), ...6 = c(82.985934075375, 417.382557034188, 0, 0.353736300347672, 1.95091900568706, 1.19359373503498, 68.3727666976661, 2.95275151914329, 4.46816919858237, 12.3444402345904), ...7 = c(0.0148890463411341, 0.0168962782166389, 4.49517538484516, 0.030235623520195, 0.378606553315736, 9.08182032551762, 1.07007663240345, 1.26467070570843, 0.905244246509581, 2.4453813655119), ...8 = c(12.4358144539012, 23.2895865413182, 0.0166626654844983、76.2371092458133、21.1129192358641、2.88107063157295、 47.303659680883、68.154120909302、33.2904033042654、56.5944153631193 ), ...9 = c(17952.563202823, 5.2593139999212, 22.4131588651991, 116.814290718508, 14706.3043351145, 63.77989250888, 149.697280644864, 1269.36851882589, 239.087006514138, 345.705681202278), ...10 = c(52.8680776105079, 0.980236672662672、0.00396924705354、18.0442003449513、81.890380752962、 1623.56216722411, 28.8605439638297, 193.373586146434, 206.014971131385, 61.8673029946462)), row.names = c(NA, -10L), class= c("tbl_df", "tbl", "data.frame"))
此处仅显示 10 行,因此仅显示 2000 年的数据。但是数据框包含 15 年(2000 年到 2014 年)。
输出应如下所示: |年 |农业 |马努 |服务| |:---:|:---:|:---:|:--:| |2000|价值|价值|价值|
|2001|价值|价值|价值|
所以,我需要每年存储三个值的输出作为最终输出。所以,15 行,3 列。
【问题讨论】:
-
您好,如果您提供一个最小的工作示例(stackoverflow.com/help/minimal-reproducible-example)会很有帮助。你的输入数据是什么样的
-
如今,R 中的 For 循环几乎绝迹。将数据更改为适合矢量化的形式,然后将数据恢复为其原始形式几乎总是更快。编码速度更快,运行速度更快。
-
非常感谢!试图这样做。
-
嗨,我已经提供了我的数据结构和预期的输出。如果可能的话,期待进一步的建议。
标签: r dataframe loops for-loop iteration