![他の列の値に基づいて「+」または「-」を持つ列を作成するには? [閉鎖]](https://linux33.com/image/174240/%E4%BB%96%E3%81%AE%E5%88%97%E3%81%AE%E5%80%A4%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%84%E3%81%A6%E3%80%8C%2B%E3%80%8D%E3%81%BE%E3%81%9F%E3%81%AF%E3%80%8C-%E3%80%8D%E3%82%92%E6%8C%81%E3%81%A4%E5%88%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
私のデータは次のとおりです。
head retinopathy.pheno.glm.logistic.hybrid1
CHROM POS ID REF ALT A1 A1_FREQ FIRTH? TEST OBS_CT BETA SE Z_STAT P ERRCODE
1 785989 1:785989:T:C C T T 0.154229 N ADD 1608 0.166419 0.0975993 1.70512 0.0881712 .
1 1130727 1:1130727:A:C A C C 0.0870647 N ADD 1608 0.148613 0.127899 1.16196 0.245253 .
1 1156131 1:1156131:T:C T C C 0.161692 N ADD 1608 0.0648246 0.0991692 0.653676 0.51332 .
1 1158631 1:1158631:A:G G A A 0.109142 N ADD 1608 -0.142729 0.111427 -1.28092 0.200221 .
1 1211292 1:1211292:C:T C T T 0.0631219 N ADD 1608 -0.102611 0.147134 -0.6974 0.485552 .
1 1478153 1:1478153:T:C T C C 0.285448 N ADD 1608 0.0407141 0.0791718 0.514251 0.607077 .
...
以下を含む「DIR」という追加の列をどのように生成しますか?
+ if BETA>0
- if BETA<0
0 if BETA=0
答え1
あなたは試すことができますミラー
$ mlr --pprint --ifs space --repifs put '
$DIR = $BETA>0 ? "+" : $BETA<0 ? "-" : "0"
' retinopathy.pheno.glm.logistic.hybrid1
CHROM POS ID REF ALT A1 A1_FREQ FIRTH? TEST OBS_CT BETA SE Z_STAT P ERRCODE DIR
1 785989 1:785989:T:C C T T 0.154229 N ADD 1608 0.166419 0.0975993 1.70512 0.0881712 . +
1 1130727 1:1130727:A:C A C C 0.0870647 N ADD 1608 0.148613 0.127899 1.16196 0.245253 . +
1 1156131 1:1156131:T:C T C C 0.161692 N ADD 1608 0.0648246 0.0991692 0.653676 0.51332 . +
1 1158631 1:1158631:A:G G A A 0.109142 N ADD 1608 -0.142729 0.111427 -1.28092 0.200221 . -
1 1211292 1:1211292:C:T C T T 0.0631219 N ADD 1608 -0.102611 0.147134 -0.6974 0.485552 . -
1 1478153 1:1478153:T:C T C C 0.285448 N ADD 1608 0.0407141 0.0791718 0.514251 0.607077 . +
データが実際に分離される方法によっては、合計を調整する必要があるかもしれません--ifs
。--repifs
答え2
どうですか?
awk 'NR==1 { $(NF+1)="DIR" }
NR>1 { if($11>0 ){$(NF+1)="+"}
if($11<0 ){$(NF+1)="-"}
if($11==0){$(NF+1)="0"}
} 1 ' file
答え3
次のPerlコードを使用して入力ファイルを変換できます。
$ perl -pale '
$_ .= $" . ("DIR", qw[0 + -][$F[10]<=>0])[$.>1];
' file
出力データ:
CHROM POS ID REF ALT A1 A1_FREQ FIRTH? TEST OBS_CT BETA SE Z_STAT P ERRCODE DIR
1 785989 1:785989:T:C C T T 0.154229 N ADD 1608 0.166419 0.0975993 1.70512 0.0881712 . +
1 1130727 1:1130727:A:C A C C 0.0870647 N ADD 1608 0.148613 0.127899 1.16196 0.245253 . +
1 1156131 1:1156131:T:C T C C 0.161692 N ADD 1608 0.0648246 0.0991692 0.653676 0.51332 . +
1 1158631 1:1158631:A:G G A A 0.109142 N ADD 1608 -0.142729 0.111427 -1.28092 0.200221 . -
1 1211292 1:1211292:C:T C T T 0.0631219 N ADD 1608 -0.102611 0.147134 -0.6974 0.485552 . -
1 1478153 1:1478153:T:C T C C 0.285448 N ADD 1608 0.0407141 0.0791718 0.514251 0.607077 . +