如何显示每一行的最大值?

时间:2018-08-23 13:53:51

标签: r dplyr

我想知道如何告诉R仅显示每行中的最大值。

例如,我想要这张桌子:

> data<- randu
> data[1:10,]


         x        y        z
1  0.000031 0.000183 0.000824
2  0.044495 0.155732 0.533939
3  0.822440 0.873416 0.838542
4  0.322291 0.648545 0.990648
5  0.393595 0.826873 0.418881
6  0.309097 0.926590 0.777664
7  0.826368 0.308540 0.413932
8  0.729424 0.741526 0.884338
9  0.317649 0.393468 0.501968
10 0.599793 0.846041 0.678107

看起来像这样:

          x        y        z
1                    0.000824
2                    0.533939
3           0.873416 
4                    0.990648
5           0.826873 
6           0.926590 
7  0.826368 
8                    0.884338
9                    0.501968
10          0.846041 

1 个答案:

答案 0 :(得分:6)

我们可以使用pmax查找每行的max

do.call(pmax, df)

并使用它创建一个逻辑矩阵并将每行中不是max的那些值替换为NA

df[df != do.call(pmax, df)[row(df)]] <- NA

或者另一个选择是apply,其中MARGIN指定为1,以遍历行并使用相同的逻辑

df[] - t(apply(df, 1, FUN = function(x) replace(x, x!= max(x), NA)))
df
#        x        y        z
#1        NA       NA 0.000824
#2        NA       NA 0.533939
#3        NA 0.873416       NA
#4        NA       NA 0.990648
#5        NA 0.826873       NA
#6        NA 0.926590       NA
#7  0.826368       NA       NA
#8        NA       NA 0.884338
#9        NA       NA 0.501968
#10       NA 0.846041       NA