索引匹配或vlookup将一个表的值用于另一个表的相应行

时间:2015-11-16 17:33:19

标签: r matrix indexing match vlookup

我确信我的问题有一个相当直接的解决方案。然而,我有限的R技能让我失望了,我还没有找到合适的解决方案。

我有一个矩阵A看起来像:

year    Avg_temp
1990    14.3
1991    14.6
1992    14.5
1993    14.4
1994    14.9
1995    15.1
1996    15.2

矩阵B看起来像:

year    Tot_hoursofsun
1992    950
1993    960
1994    945

我想做一个VLOOKUP(或索引匹配);目标是添加一个具有太阳小时的列,以防矩阵B中存在该值矩阵A的年份。请参阅下面的所需输出:

year    Avg_temp    Tot_hoursofsun
1990    14.3    Not available
1991    14.6    Not available
1992    14.5    950
1993    14.4    960
1994    14.9    945
1995    15.1    Not available
1996    15.2    Not available

提前多多感谢!

2 个答案:

答案 0 :(得分:1)

您可以使用qdapTools包中的lookup()函数来等效VLOOKUP。

假设你的矩阵(或数据帧)被称为A和B:

library(qdapTools)
A$Tot_hoursofsun <- lookup(A$year,B)

这不会在您的数据框中输入文本“不可用”,而是填充没有NA的对应值的单元格,这是R用于丢失数据的符号。

答案 1 :(得分:0)

您可以进行合并:

m<-merge(A,B,all=TRUE)
m[is.na(m)]<-"Not available"

 m
  year Avg_temp Tot_hoursofsun
1 1990     14.3  Not available
2 1991     14.6  Not available
3 1992     14.5            950
4 1993     14.4            960
5 1994     14.9            945
6 1995     15.1  Not available
7 1996     15.2  Not available

DATA:

A<-structure(list(year = 1990:1996, Avg_temp = c(14.3, 14.6, 14.5, 
14.4, 14.9, 15.1, 15.2)), .Names = c("year", "Avg_temp"), class = "data.frame", row.names = c(NA, 
-7L))

B<-structure(list(year = 1992:1994, Tot_hoursofsun = c(950L, 960L, 
945L)), .Names = c("year", "Tot_hoursofsun"), class = "data.frame", row.names = c(NA, 
-3L))