匹配值时返回值的R代码

时间:2018-12-24 10:38:06

标签: 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 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的前面和两行中获取其父项和父项的调用。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我不清楚您要做什么,但是听起来您需要INNER JOIN两个数据框。使用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"')

这将创建两个数据帧,一个带有父数据,另一个带有Dams数据。 (请注意,您仅需要第一个数据帧中的ID,仅需要第二个数据帧中的标记。请确保在每个SQL调用中均填写正确的列名。此外,请注意在整个sqldf代码中使用单引号,然后在其中包含句点的特定列名称周围使用双引号。)

您的下一步将是执行rbind()来合并两个数据帧:

newdata <- rbind(sires, Dams)

这将创建一个最终数据帧,该数据帧将合并父级和大坝中的数据,并记录ID号和标记号。希望这会有所帮助。