【发布时间】:2015-05-26 14:05:32
【问题描述】:
假设我有以下数据框:
DF1 <- data.frame("A" = rep(c("A","B"), 18),
"B" = rep(c("C","D","E"), 12),
"NUM"= rep(rnorm(36,10,1)),
"TEST" = rep(NA,36))
DF2 <- data.frame("A" = rep("A",6),
"B" = rep(c("C","D"),6),
"VAL" = rep(c(1,3),3))
*注意:DF2 中变量A 和B 的每个唯一组合都应该有一个唯一的VAL。
对于每一行,如果A 和A 列中的值匹配并且列中的值匹配,我想将TEST 中的NA 替换为DF1 中VAL 的相应值B 和 B 匹配该行。否则,我会将TEST 保留为NA。如果不使用 match 循环遍历每个组合,我将如何做到这一点?
理想情况下,答案将扩展到两个数据框,其中包含许多要匹配的列。
【问题讨论】:
-
我认为在您的 DF2 中有多行可以匹配 DF1 的第 1 列和第 2 列。所以,我不确定应该采用哪个 VAL。另外,根据例子,两个数据集的维度是不一样的。
-
抱歉,
DF2中的每个唯一组合都应该有一个唯一的VAL。我需要想办法在示例中对其进行编码。 -
在这种情况下,DF2 将只有两行,即
DF2 <- data.frame(A=rep('A',2), B=c('C', 'D'), VAL=rnorm(2))和merge将得到结果merge(DF1, DF2, all=TRUE) -
@goldisfine:这并不能说明什么。我们需要知道对于
A和B的给定组合应该选择哪个VAL,因为有多个。 -
现在
DF2中的每个组合都有一个唯一值,所以我认为DF1中的每一行只有一个VAL可能的选项。我猜DF2可以简化为只有预测变量的唯一组合。
标签: r merge dataframe compound-key