我无法想象以前没有人问过这个问题,但我花了2个小时寻找,什么也没有找到.

假设我有5个独立的数据框,其中包含不同年份的相同四个变量.每个数据框中都有一个名为‘ID’的公共变量.所有数据框都已经是长格式(因此观测结果列在彼此下面),以供进一步分析. 每个数据帧由不同数量的观测值组成,因此并非所有ID都包含在每个数据帧中.其目的是将这些数据框合并为面板数据.因此,只有完整的 case 才应被考虑.如果一个ID丢失了一年,它应该被丢弃.

为了更好地理解,下面是一些示例代码:

#2010
df1=data.frame(ID=c(111,112,113,114),"year"=c(2010, 2010, 2010, 2010),"income"=c(3800, 2200, 1500, 2700),"state"=c("NI", "SH", "BY", "NI"))
df1

ID year income state
1 111 2010   3800    NI
2 112 2010   2200    SH
3 113 2010   1500    BY
4 114 2010   2700    NI

#2011
df2=data.frame(ID=c(112,113,114,115,116),"year"=c(2011, 2011, 2011, 2011, 2011),"income"=c(2300,1500,2500,4200,6000),"state"=c("BY", "BY", "SH", "BY", "HH"))
df2

  ID year income state
1 112 2011   2300    BY
2 113 2011   1500    BY
3 114 2011   2500    SH
4 115 2011   4200    BY
5 116 2011   6000    HH

#2012
df3=data.frame(ID=c(109,112,113,114),"year"=c(2012,2012,2012,2012),"income"=c(1200,2500,1500,3000),"state"=c("BW", "BY", "NI", "SH"))
df3

   ID year income state
1 109 2012   1200    BW
2 112 2012   2500    BY
3 113 2012   1500    NI
4 114 2012   3000    SH

#Desired result
df_final=data.frame(ID=c(112,112,112,113,113,113,114,114,114),"year"=c(2010,2011,2012,2010,2011,2012,2010,2011,2012),"income"=c(2200,2300,2500,1500,1500,1500,2700,2500,300),"state"=c("SH", "BY", "BY", "BY", "BY", "NI", "NI", "SH", "SH"))
df_final

 ID year income state
1 112 2010   2200    SH
2 112 2011   2300    BY
3 112 2012   2500    BY
4 113 2010   1500    BY
5 113 2011   1500    BY
6 113 2012   1500    NI
7 114 2010   2700    NI
8 114 2011   2500    SH
9 114 2012    300    SH

我发现了一个类似的问题,在哪里推荐来自reshape2包的面板数据函数.尽管它工作得很好,但不幸的是,它并不排除 case .

有谁知道解决办法吗? 我很感激任何形式的帮助.

提前谢谢!

推荐答案

我们可以得到list中的数据集,找到intersect,subset中的list个元素和base R中的rbind的公共ID

lst1 <- list(df1, df2, df3)
commonIds <- Reduce(intersect, lapply(lst1, `[[`, "ID"))
out <- do.call(rbind, lapply(lst1, subset, subset = ID %in% commonIds))
out <- out[order(out$ID),]
row.names(out) <- NULL

-输出

> out
   ID year income state
1 112 2010   2200    SH
2 112 2011   2300    BY
3 112 2012   2500    BY
4 113 2010   1500    BY
5 113 2011   1500    BY
6 113 2012   1500    NI
7 114 2010   2700    NI
8 114 2011   2500    SH
9 114 2012   3000    SH

R相关问答推荐

当y大于阈值和值范围时,在时间序列中突出显示区域

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

无法将传奇添加到cowplot多情节中

R:连接值,而不是变量?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

使用case_match()和char数组重新编码值

在R中无法读入具有Readxl和lApply的数据集

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

我正在努力用R计算数据集中的中值逐步距离

仅在Facet_WRAP()中的相应方面包含geom_abline()

用R ggplot2求上、下三角形中两个变量的矩阵热图

在GG图中绘制射线的自动程序

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

在gggraph中显示来自不同数据帧的单个值

用多边形替换地块点

基于R中的辅助向量中的值有条件地连接向量中的字符串

整理ggmosaic图的标签

R中的Desolve:返回的导数数错误

有没有办法将勾选/审查标记添加到R中的累积关联图中?