匹配两列以定义数值

时间:2015-08-21 11:35:40

标签: r match

采取一些基本数据

Aa <- c(1,1,2,3,4,4,5)
Bb <- c(3,6,1,1,2,1,4)
Cc <- 1:length(Aa)
Dd <- sample(1:10,7)
df <- data.frame(Aa,Bb,Cc,Dd)
colnames(df)[1] <- "ID"
colnames(df)[2] <- "Type"
colnames(df)[3] <- "PNR"
colnames(df)[4] <- "height"


Dd <- c(1,1,1,1,3,3,4,5)
Ee <- c(3,3,3,6,1,1,1,4)
Ff <- c(1,2,3,3,1,3,2,2)
df2 <- data.frame(Dd,Ee,Ff)
colnames(df2)[1] <- "ID"
colnames(df2)[2] <- "Type"
colnames(df2)[3] <- "Class"

我想创建df2$PNR来调用df$PNRIDType相同的值。

我使用过代码:

df2$PNR <- df$PNR[match(df2$ID==df$ID & df2$Type==df$Type)]

任何指导都将被赞赏输出

df2
#  ID Type Class PNR
#1  1    3     1   1
#2  1    3     2   1
#3  1    3     3   1
#4  1    6     3   2
#5  3    1     1   4
#6  3    1     3   4
#7  4    1     2   6
#8  5    4     2   7

已向merge建议了一个解决方案,但我不想合并所有数据(即我不希望$height中的df2

1 个答案:

答案 0 :(得分:1)

尝试merge(df2, df, by=c("ID","Type")),但请先更正Cc <- 1:length(Aa)

如果要排除变量,可以在“合并”之前执行此操作,如:df$height = NULL或在加入后执行此操作:

result = merge(df2, df, by=c("ID","Type"))
result$height=NULL
result