使用因子对2个数据帧进行计算

时间:2019-04-11 12:51:53

标签: r

我有两个数据框,需要将Ct列从以下位置连接在一起:

> Df1
  Gene Treatment Replic    Ct
1 ACTA2       CON      1 1.900
2 ACTA2       CON      2 2.780
3 ACTA2       TGF      1 3.001
4 ACTA2       TGF      2 4.010
5  CAV1       CON      1 1.330
6  CAV1       CON      2 2.330
7  CAV1       TGF      1 6.300
8  CAV1       TGF      2 4.200
> Df2
  Gene Treatment Replic    Ct
1 PPIA       CON      1 3.300
2 PPIA       CON      2 1.700
3 PPIA       TGF      1 1.001
4 PPIA       TGF      2 3.700

无论TreatmentReplic中的Df1Df2值是否都匹配,我想将Ct中的Df2值添加到Df1中的新列。即,我正在寻找创建这个:

 Gene Treatment Replic    Ct  Ct_y
1 ACTA2       CON      1 1.900 3.300
2 ACTA2       CON      2 2.780 1.700
3 ACTA2       TGF      1 3.001 1.001
4 ACTA2       TGF      2 4.010 3.700
5  CAV1       CON      1 1.330 3.300
6  CAV1       CON      2 2.330 1.700
7  CAV1       TGF      1 6.300 1.001
8  CAV1       TGF      2 4.200 3.700

数据集很大,并且某些地方缺少数据,因此我不能依靠先复制Df2然后复制cbind。同样,join_left将不起作用,因为键不是唯一的。我迷路了。

非常感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

您可能会这样-

> data.table::setDT(dt1)
> data.table::setDT(dt2)
> setnames(dt2,"Ct","Ct_y")
> dt1[dt2[,!c("Gene")],on=.(Treatment,Replic)]

    Gene Treatment Replic    Ct  Ct_y
1: ACTA2       CON      1 1.900 3.300
2:  CAV1       CON      1 1.330 3.300
3: ACTA2       CON      2 2.780 1.700
4:  CAV1       CON      2 2.330 1.700
5: ACTA2       TGF      1 3.001 1.001
6:  CAV1       TGF      1 6.300 1.001
7: ACTA2       TGF      2 4.010 3.700
8:  CAV1       TGF      2 4.200 3.700
相关问题