我有一个六列数据框,如下所示:
A Sample_a Sample_a,Sample_b Sample_a,Sample_b,Sample_c
B Sample_b Sample_c NA
C Sample_c NA NA
D Sample_d Sample_d,Sample_e Sample_d,Sample_e,Sample_f
E Sample_e Sample_f NA
F Sample_f NA NA
我想对数据帧进行逐行排序,NA最小,然后是NA最大。我希望下面有一个输出:
A Sample_a Sample_a,Sample_b Sample_a,Sample_b,Sample_c
D Sample_d Sample_d,Sample_e Sample_d,Sample_e,Sample_f
B Sample_b Sample_c NA
E Sample_e Sample_f NA
C Sample_c NA NA
F Sample_f NA NA
但是,当我尝试执行sort -r -k3 -r -k4
时,却显示以下输出:
E Sample_e Sample_f NA
D Sample_d Sample_d,Sample_e Sample_d,Sample_e,Sample_f
B Sample_b Sample_c NA
A Sample_a Sample_a,Sample_b Sample_a,Sample_b,Sample_c
F Sample_f NA NA
C Sample_c NA NA
在这种情况下,如何正确排序表格?预先感谢。
答案 0 :(得分:0)
使用awk计数记录中的NA,输出编号和记录,使用sort
并使用cut
删除第一列:
$ awk '{tmp=$0; print gsub(/NA/,"NA",tmp),$0 }' file | # append count of NAs
sort -n | # sort
cut -d\ -f 2- # remove count
输出:
A Sample_a Sample_a,Sample_b Sample_a,Sample_b,Sample_c
D Sample_d Sample_d,Sample_e Sample_d,Sample_e,Sample_f
B Sample_b Sample_c NA
E Sample_e Sample_f NA
C Sample_c NA NA
F Sample_f NA NA
您可能需要根据自己的喜好调整定界符等,但这是一般的方法。另外,ATM的所有NA
字符串都被计算在内,这可能不是正确的事情,但是由于不知道文件中的分隔符,我无法(例如对于制表符delim):
$ awk -F"\t" '{c=0;for(i=1;i<=NF;i++)if($i=="NA")c++;print c,$0}' file | ...