在条件下用自己的值填充R datatable

在条件下用自己的值填充R datatable,r,if-statement,data.table,R,If Statement,Data.table,以该数据表为例: ID Type W X Y Z D stderr Zscore BABA ABBA nsnps 1: D14 OG P1 P2 X1 OUTGROUP 0.0000 0.000000 -4.100 0 0 0 2: D14 OG P1 P2 X2 OUTGROUP 0.0000 0.000000 7.200

以该数据表为例:

    ID   Type   W     X        Y        Z       D   stderr Zscore  BABA  ABBA  nsnps
1: D14     OG   P1    P2       X1 OUTGROUP  0.0000 0.000000 -4.100     0     0      0
2: D14     OG   P1    P2       X2 OUTGROUP  0.0000 0.000000  7.200     0     0      0
3: D14     OG   P1    P2       X3 OUTGROUP  0.0000 0.000000 -2.000     0     0      0
4: D14    REP   P1    P2       X1 OUTGROUP -0.0281 0.005291 -5.317 46148 48819 869128
5: D14    REP   P1    P2       X2 OUTGROUP  0.0413 0.005276  7.837 43594 40132 751945
6: D14    REP   P1    P2       X3 OUTGROUP -0.0177 0.005773 -3.072 43764 45344 787440
7: D14    EXP   P1    P2       X1 OUTGROUP -0.0226 0.006499 -3.485 44643 46712 835427
8: D14    EXP   P1    P2       X2 OUTGROUP  0.0472 0.006721  7.030 44123 40142 758734
9: D14    EXP   P1    P2       X3 OUTGROUP -0.0173 0.006892 -2.509 45022 46606 809031
我正在尝试向所有类型不同于OG的行添加一列。在这个新列中,我试图将Zscore放在OG类型的对应行中。 以下是预期输出:

    ID   Type   W     X        Y        Z       D   stderr Zscore  BABA  ABBA  nsnps.  Zexpect
1: D14     OG   P1    P2       X1 OUTGROUP  0.0000 0.000000 -4.100     0     0      0  NA
2: D14     OG   P1    P2       X2 OUTGROUP  0.0000 0.000000  7.200     0     0      0  NA
3: D14     OG   P1    P2       X3 OUTGROUP  0.0000 0.000000 -2.000     0     0      0  NA
4: D14    REP   P1    P2       X1 OUTGROUP -0.0281 0.005291 -5.317 46148 48819 869128  -4.100
5: D14    REP   P1    P2       X2 OUTGROUP  0.0413 0.005276  7.837 43594 40132 751945   7.200
6: D14    REP   P1    P2       X3 OUTGROUP -0.0177 0.005773 -3.072 43764 45344 787440  -2.000 
7: D14    EXP   P1    P2       X1 OUTGROUP -0.0226 0.006499 -3.485 44643 46712 835427   -4.100
8: D14    EXP   P1    P2       X2 OUTGROUP  0.0472 0.006721  7.030 44123 40142 758734   7.200
9: D14    EXP   P1    P2       X3 OUTGROUP -0.0173 0.006892 -2.509 45022 46606 809031  -2.000   
如果带有OG的行包含它们自己的ZScore,则这不是问题。我试着这么做,但没有成功:

DT[Type!="OG", Zexpect:=Zscore, .("ID","Type")]

谢谢

根据您是否关心Zexpect是OG组的NA,这应该适用于此数据集:

DT[,Zexpect:=firstZscore,by=.ID,Y] 为了更强大,您可能希望自己重新加入:

DT[DT[Type==OG],on=.ID,Y,Zexpect:=i.Zscore] 在任何一种情况下,如果Zexpect有问题,将其分配回NA都是很简单的:

清理 DT[Type==OG,Zexpect:=NA_real_u2;] DT ID类型W X Y Z D标准件Zscore BABA ABBA nsnps Zexpect 1:D14 OG P1 P2 X1外组0.0000 0.000000-4.100 0 NA 2:D14 OG P1 P2 X2外组0.0000 0.000000 7.200 0 NA 3:D14 OG P1 P2 X3外组0.0000 0.000000-2.000 0 NA 4:D14代表P1 P2 X1外组-0.0281 0.005291-5.317 46148 48819 869128-4.1 5:D14代表P1 P2 X2分组0.0413 0.005276 7.837 43594 40132 751945 7.2 6:D14代表P1 P2 X3分组-0.0177 0.005773-3.072 43764 45344 787440-2.0 7:D14 EXP P1 P2 X1输出组-0.0226 0.006499-3.485 44643 46712 835427-4.1 8:D14 EXP P1 P2 X2外组0.0472 0.006721 7.030 44123 40142 758734 7.2 9:D14 EXP P1 P2 X3外组-0.0173 0.006892-2.509 45022 46606 809031-2.0
根据您是否关心Zexpect是否为OG组的NA,这应该适用于此数据集:

DT[,Zexpect:=firstZscore,by=.ID,Y] 为了更强大,您可能希望自己重新加入:

DT[DT[Type==OG],on=.ID,Y,Zexpect:=i.Zscore] 在任何一种情况下,如果Zexpect有问题,将其分配回NA都是很简单的:

清理 DT[Type==OG,Zexpect:=NA_real_u2;] DT ID类型W X Y Z D标准件Zscore BABA ABBA nsnps Zexpect 1:D14 OG P1 P2 X1外组0.0000 0.000000-4.100 0 NA 2:D14 OG P1 P2 X2外组0.0000 0.000000 7.200 0 NA 3:D14 OG P1 P2 X3外组0.0000 0.000000-2.000 0 NA 4:D14代表P1 P2 X1外组-0.0281 0.005291-5.317 46148 48819 869128-4.1 5:D14代表P1 P2 X2分组0.0413 0.005276 7.837 43594 40132 751945 7.2 6:D14代表P1 P2 X3分组-0.0177 0.005773-3.072 43764 45344 787440-2.0 7:D14 EXP P1 P2 X1输出组-0.0226 0.006499-3.485 44643 46712 835427-4.1 8:D14 EXP P1 P2 X2外组0.0472 0.006721 7.030 44123 40142 758734 7.2 9:D14 EXP P1 P2 X3外组-0.0173 0.006892-2.509 45022 46606 809031-2.0 对于W、X和Y的每个值,您都可以得到类型为'OG'的相应Zscore

对于W、X和Y的每个值,您都可以得到类型为'OG'的相应Zscore


谢谢,在我的示例中,我可能不够具体,因为非健壮性会将第一个OG复制到所有的OG。第二个选项工作得非常好!再次感谢!谢谢,在我的示例中,我可能不够具体,因为非健壮性会将第一个OG复制到所有的OG。第二个选项工作得非常好!再次感谢!
library(data.table)
setDT(DT)
DT[, Zexpect:= Zscore[Type == 'OG'], .(W, X, Y)]
DT[Type == 'OG', Zexpect := NA_real_]
DT

#    ID Type  W  X  Y        Z       D   stderr Zscore  BABA  ABBA  nsnps Zexpect
#1: D14   OG P1 P2 X1 OUTGROUP  0.0000 0.000000 -4.100     0     0      0      NA
#2: D14   OG P1 P2 X2 OUTGROUP  0.0000 0.000000  7.200     0     0      0      NA
#3: D14   OG P1 P2 X3 OUTGROUP  0.0000 0.000000 -2.000     0     0      0      NA
#4: D14  REP P1 P2 X1 OUTGROUP -0.0281 0.005291 -5.317 46148 48819 869128    -4.1
#5: D14  REP P1 P2 X2 OUTGROUP  0.0413 0.005276  7.837 43594 40132 751945     7.2
#6: D14  REP P1 P2 X3 OUTGROUP -0.0177 0.005773 -3.072 43764 45344 787440    -2.0
#7: D14  EXP P1 P2 X1 OUTGROUP -0.0226 0.006499 -3.485 44643 46712 835427    -4.1
#8: D14  EXP P1 P2 X2 OUTGROUP  0.0472 0.006721  7.030 44123 40142 758734     7.2
#9: D14  EXP P1 P2 X3 OUTGROUP -0.0173 0.006892 -2.509 45022 46606 809031    -2.0