跨两列匹配以定义数值
match across two columns to define a numeric value
获取一些基本数据
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$PNR
中的值,其中 ID
和 Type
相同。
我用过代码:
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
提出解决方案,但我不想合并所有数据(即我不想 df2
中的 $height
)
尝试merge(df2, df, by=c("ID","Type"))
,但首先更正为Cc <- 1:length(Aa)
如果您想排除变量,您可以在 "merge" 之前执行此操作,例如:df$height = NULL
或在连接之后执行此操作:
result = merge(df2, df, by=c("ID","Type"))
result$height=NULL
result
获取一些基本数据
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$PNR
中的值,其中 ID
和 Type
相同。
我用过代码:
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
提出解决方案,但我不想合并所有数据(即我不想 df2
中的 $height
)
尝试merge(df2, df, by=c("ID","Type"))
,但首先更正为Cc <- 1:length(Aa)
如果您想排除变量,您可以在 "merge" 之前执行此操作,例如:df$height = NULL
或在连接之后执行此操作:
result = merge(df2, df, by=c("ID","Type"))
result$height=NULL
result