Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与值匹配时返回值的R代码_R - Fatal编程技术网

与值匹配时返回值的R代码

与值匹配时返回值的R代码,r,R,我是R编程新手,想知道我是否能在一个我一直困扰的问题上得到一些帮助。 我有两个数据帧:第一个数据帧有三列:ID、sire.ID和Dam.ID df1 ID Sire.ID Dam.ID 1 A D G 2 B E H 3 C F I 第二个数据帧具有相同的三列,加上17列中17个标记的基因分型调用 Part of df2: ID Sire.ID Dam.ID marker1 marker2 marker3 marker

我是R编程新手,想知道我是否能在一个我一直困扰的问题上得到一些帮助。 我有两个数据帧:第一个数据帧有三列:ID、sire.ID和Dam.ID

df1
  ID Sire.ID Dam.ID
1  A       D      G
2  B       E      H
3  C       F      I
第二个数据帧具有相同的三列,加上17列中17个标记的基因分型调用

Part of df2:
ID Sire.ID Dam.ID marker1 marker2 marker3 marker4 marker5 marker6 marker7 marker8 marker9
1  D       j      K      12      21      11      11      12      22      11      22      11
2  G       l      m      12      21      11      11      12      22      11      22      11
3  H       n      o      12      21      11      11      12      22      11      22      11
下面是我在R中需要做的事情:如果第一个数据帧中的sire.ID存在于第二个数据帧中的ID列中,那么为相关子代返回第一个数据帧中的第二个数据帧中的ID及其调用,对于Dam.ID也是如此。简单地说,对于第一个数据帧中的每个ID,我希望在ID前面和两行中获得对其sire和dam的调用

Expected output: ID Sire.ID Dam.ID ID..4 Sire.ID..5 Dam.ID..6 marker1 marker2 marker3 marker4 marker5 marker6 marker7 1  A       D      G    D          j         K      12      21      11      11      12      22 11 2  A       D      G     G          l         m      12      21      11      11      12      22      11 3  B       E      H     H          n         o      12      21      11      11      12      22      11   marker8 marker9 1      22      11 2      22      11 3      22      11

感谢您的帮助

我不完全清楚您想做什么,但听起来您需要将两个数据帧内部连接起来。使用
sqldf
包,然后运行

sires <- sqldf('SELECT df1.ID, df2.marker1, df2.marker2, ... df2.marker17
FROM df1 INNER JOIN df2 ON  df1."sire.ID" = df2."sire.ID"')
Dams <- sqldf('SELECT df1.ID, df2.marker1, df2.marker2, ... df2.marker17
FROM df1 INNER JOIN df2 ON  df1."Dam.ID" = df2."Dam.ID"')

这将创建一个最终数据帧,该数据帧将组合来自父系和母系的数据,记录ID号和标记号。希望这有帮助。

欢迎使用StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助您。非常感谢您的帮助。请注意,这可以完全用sql完成:
sqldf(“选择…联合选择…”)
。列名应该相同。或者如果不希望消除重复项,请使用
union all
newdata <- rbind(sires, Dams)