如何按r降序排序r数据帧中的行

时间:2017-04-17 09:42:02

标签: r

我在r

中有以下数据框
 no    no1    no2    no3    no4
 A       0     34     54     21
 B      43      0     23     65
 C      56     23      0      0

我想按降序打印列名的所有非零值(前3)。期望的数据帧将是

 no    no1    no2    no3     no4          names
 A       0     34     54      21    no3 no2 no1
 B      43      0     23      65    no4 no1 no3
 C      56     23      0       0        no1 no2

我在R中使用以下函数在名称列中打印数组。我不能做的是按降序排序。

     simplify2array(apply(df[2:5],1,function(x) paste(names(df[2:5])[x!=0],collapse="")))

如何修改上面的函数以适应降序排序行并只采用前3个值

1 个答案:

答案 0 :(得分:1)

我们可以applyMARGIN=1一起循环使用sort下降的非零元素head,我们可以将第一个&# 39; N'元素(根据OP的评论),得到names,然后paste一起

df1$names <- apply(df1[-1], 1, FUN = function(x) 
             paste(names(head(sort(x[x!=0], decreasing = TRUE), 3)), collapse=" "))
df1
#  no no1 no2 no3 no4       names
#1  A   0  34  54  21 no3 no2 no4
#2  B  43   0  23  65 no4 no1 no3
#3  C  56  23   0   0     no1 no2