首页 > 解决方案 > 如何将面板数据与每个季度的不同数据进行组合然后识别?

问题描述

我每年每个季度都有 4 个数据库,我想将它们合并以将所有 4 个季度放在一个基础上。我想为每个季度创建一个指标,但我不知道该怎么做。我没有将季度作为数据中的变量提及,但 4 个数据库(4 个季度)关注同一个人。

在此处输入图像描述

标签: rpanel

解决方案


假设您有名为“quarter.X”的数据框,您可以使用列出这些名称ls并将它们放入新列表“季度”中,mget按顺序使用rbind。对于我们用来调用列表的rbind多个数据框。do.callrbind

rbinding 之前,我们使用替换功能创建季度指标`[<-`;使用Map我们遍历季度列表并value=从序列中1:4一个一个地添加。由于ls默认情况下按字母顺序对名称进行排序,因此如果数据框的名称正确,则这是安全的。 例子:

quarters <- mget(ls(pattern="quarter.\\d$"))

res <- do.call(rbind, Map(`[<-`, quarters, "quarter", value=1:4))
res
#             id         x1         x2          x3 quarter
# quarter.1.1  1  1.3709584  0.6328626  1.51152200       1
# quarter.1.2  2 -0.5646982  0.4042683 -0.09465904       1
# quarter.1.3  3  0.3631284 -0.1061245  2.01842371       1
# quarter.2.1  1 -0.0627141 -1.3888607  0.63595040       2
# quarter.2.2  2  1.3048697 -0.2787888 -0.28425292       2
# quarter.2.3  3  2.2866454 -0.1333213 -2.65645542       2
# quarter.3.1  1 -2.4404669 -1.7813084  1.89519346       3
# quarter.3.2  2  1.3201133 -0.1719174 -0.43046913       3
# quarter.3.3  3 -0.3066386  1.2146747 -0.25726938       3
# quarter.4.1  1 -1.7631631  0.4554501 -0.60892638       4
# quarter.4.2  2  0.4600974  0.7048373  0.50495512       4
# quarter.4.3  3 -0.6399949  1.0351035 -1.71700868       4

如果行名困扰您,请在之后使用rownames(res) <- NULL以获取连续数字。


数据:

set.seed(42)
quarter.1 <- data.frame(id=1:3, x1=rnorm(3), x2=rnorm(3), x3=rnorm(3))
quarter.2 <- data.frame(id=1:3, x1=rnorm(3), x2=rnorm(3), x3=rnorm(3))
quarter.3 <- data.frame(id=1:3, x1=rnorm(3), x2=rnorm(3), x3=rnorm(3))
quarter.4 <- data.frame(id=1:3, x1=rnorm(3), x2=rnorm(3), x3=rnorm(3))

推荐阅读