我是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
感谢您的帮助
答案 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号和标记号。希望这会有所帮助。