我确信我的问题有一个相当直接的解决方案。然而,我有限的R技能让我失望,但我还没有找到合适的解决方案。
我有一个矩阵A看起来像:
Year SIC alpha
[1,] 1990 13 -0.08610973
[2,] 1990 15 -0.02270707
[3,] 1990 20 0.01273243
[4,] 1990 25 -0.25173402
[5,] 1991 26 -0.02625965
[6,] 1991 27 -0.02685330
....
和矩阵B看起来像
46 27 13 37 20 ...
1989 NA NA NA NA NA
1990 NA NA NA NA NA
1991 NA NA NA NA NA
我想进行一种二维查找。我想粘贴矩阵A'" alpha"中的值。到矩阵B,其中B的行名称匹配A$Year
,B的列名称匹配A$SIC
。所以基本上类似于Excel的索引匹配函数。
结果如下:
46 27 13 37 20 ...
1989 NA NA NA NA NA
1990 NA NA -0.08610973 NA 0.01273243
1991 NA -0.02685330 NA NA NA
我希望有人能帮助我。
提前多多感谢!
答案 0 :(得分:2)
#reproduce data
A <- read.table(text="Year SIC alpha
1990 13 -0.08610973
1990 15 -0.02270707
1990 20 0.01273243
1990 25 -0.25173402
1991 26 -0.02625965
1991 27 -0.02685330", header=TRUE)
B <- read.table(text=" 46 27 13 37 20
1989 NA NA NA NA NA
1990 NA NA NA NA NA
1991 NA NA NA NA NA", header=TRUE, check.names=FALSE)
A <- as.matrix(A)
B <- as.matrix(B)
#reshape to long format
Bm <- stack(as.data.frame(B))
Bm$ind <- as.character(Bm$ind)
Bm$year <- rownames(B)
#merge
C <- merge(Bm[, c("ind", "year")],
as.data.frame(A),
by.x=c("ind", "year"),
by.y=c("SIC", "Year"),
all.x=TRUE)
#reshape to wide format
library(reshape2)
dcast(C, year~ind)
# year 13 20 27 37 46
#1 1989 NA NA NA NA NA
#2 1990 -0.08610973 0.01273243 NA NA NA
#3 1991 NA NA -0.0268533 NA NA