我有两个数据帧df1和df2 .
df1 <- data.frame(x1=c("A35", "A41", "A49"),
x2=c(8, 24, 33),
x3=c(15, 63, 54))
df2 <- data.frame(y1=c("A35", "A38", "A41", "A41", "A49"),
y2 = c(9, 20, 24, 32, 84))
我想根据以下三个条件从df2中选择行
(1)df2的y1与df1的x1相匹配;
(2)df1的y2 = d2的x2
(3)df2的y2 = df1的<x3
符合条件的数据将作为新列添加到df1 . 如果df1的行具有多个匹配,那么这些附加匹配也将作为新列添加 .
预期的结果是
data.frame(x1=c("A35", "A41", "A49"),
x2=c(8, 24, 33),
x3=c(15, 63, 54),
z1 = c("A35", "A41", ""),
z2 = c(9, 24,""),
z3 = c("", "A41", ""),
z4 = c("", 32, ""))
x1 x2 x3 z1 z2 z3 z4
A35 8 15 A35 9
A41 24 63 A41 24 A41 32
A49 33 54
提前致谢!
2 回答
如果我正确理解你的问题,这应该有效:
建议不要使用长度不等的数据帧,使用列表应该更好地用于此目的 .
我创建了一个完成工作的代码,尽管我不确定它是最有效的方法 .
首先,您需要比较两个数据帧的每一行 . 这可以使用apply函数中的apply函数来完成(基本上:对于df1中的每一行,与df2中的每一行进行比较)并返回匹配值及其索引 .
这将存储在一个杂乱的列表中,其中包含不匹配的空元素 . 因此,在清理列表后,可以使用sapply函数将生成的匹配添加到df1的每个单独行 .
结果列表是您正在寻找的 . 如果有必要,您可以将其重新转换为数据帧 .